Comment déclarer une variable dans SQL Server et l'utiliser dans la même procédure stockée

J'essaie d'obtenir la valeur de BrandID dans une table et de l'ajouter à une autre table. Mais je ne peux pas le faire fonctionner. Quelqu'un sait comment le faire?

CREATE PROCEDURE AddBrand
AS

DECLARE 
@BrandName nvarchar(50),
@CategoryID int,
@BrandID int

SELECT @BrandID = BrandID FROM tblBrand 
WHERE BrandName = @BrandName

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (@CategoryID, @BrandID) 

RETURN
32
demandé sur Jon Seigel 2010-05-08 12:10:29

3 réponses

Qu'est-ce qui ne va pas avec ce que vous avez? Quelle erreur obtenez - vous, ou quel résultat obtenez-vous ou n'obtenez-vous pas qui ne correspond pas à vos attentes?

Je peux voir les problèmes suivants avec ce SP, qui peuvent ou non se rapporter à votre problème:

  • Vous avez un parasite ) après @BrandName votre SELECT (à la fin)
  • Vous Ne définissez pas @CategoryID ou @BrandName sur n'importe quoi n'importe où (ce sont des variables locales, mais vous ne leur attribuez pas de valeurs)

Modifier Répondre à votre commentaire: l'erreur vous dit que vous n'avez pas déclaré de paramètres pour le SP (et vous ne l'avez pas fait), mais vous l'avez appelé avec des paramètres. Sur la base de votre réponse à propos de @CategoryID, je suppose que vous vouliez que ce soit un paramètre plutôt qu'une variable locale. Essayez ceci:

CREATE PROCEDURE AddBrand
   @BrandName nvarchar(50),
   @CategoryID int
AS
BEGIN
   DECLARE @BrandID int

   SELECT @BrandID = BrandID FROM tblBrand WHERE BrandName = @BrandName

   INSERT INTO tblBrandinCategory (CategoryID, BrandID) VALUES (@CategoryID, @BrandID)
END

Vous appelleriez alors ceci comme ceci:

EXEC AddBrand 'Gucci', 23

...en supposant que le nom de marque était 'Gucci' et l'ID de catégorie était 23.

31
répondu T.J. Crowder 2017-12-10 08:23:11

Dans sql 2012 (et peut-être aussi loin que 2005), vous devriez faire ceci:

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
1
répondu dave 2014-03-13 16:12:44
CREATE PROCEDURE AddBrand
@BrandName nvarchar(50) = null,
@CategoryID int = null,
AS    
BEGIN

DECLARE @BrandID int = null
SELECT @BrandID = BrandID FROM tblBrand 
WHERE BrandName = @BrandName

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (@CategoryID, @BrandID)

END

EXEC AddBrand @BrandName = 'BMW', @CategoryId = 1
1
répondu Johnny 2017-04-09 16:56:19