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
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
votreSELECT
(à 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.
Dans sql 2012 (et peut-être aussi loin que 2005), vous devriez faire ceci:
EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23
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