web-dev-qa-db-fra.com

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 correctement?

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
37
Nicklas

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

Je peux voir les problèmes suivants avec ce SP, qui peuvent ou non être liés à votre problème:

  • Vous avez un ) superflu après le @BrandName dans votre SELECT (à la fin)
  • Vous ne définissez ni @CategoryID ni @BrandName nulle part (ce sont des variables locales, mais vous ne leur attribuez pas de valeurs)

Edit En réponse à votre commentaire: L'erreur vous indique que vous n'avez déclaré aucun parameters pour le SP (et vous ne l'avez pas encore fait), mais vous l'avez appelé avec des paramètres. D'après votre réponse à propos de @CategoryID, j'imagine que vous vouliez que ce soit un paramètre plutôt qu'une variable locale. Essaye ça:

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 que la catégorie ID était 23.

37
T.J. Crowder
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
Johnny

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

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
1
dave

Aucune des méthodes ci-dessus n'a fonctionné pour moi, donc je poste comme je l'ai fait

DELIMITER $$
CREATE PROCEDURE AddBrand()
BEGIN 

DECLARE BrandName varchar(50);
DECLARE CategoryID,BrandID  int;
SELECT BrandID = BrandID FROM tblBrand 
WHERE BrandName = BrandName;

INSERT INTO tblBrandinCategory (CategoryID, BrandID) 
       VALUES (CategoryID, BrandID);
END$$
0
PrJ