2010-05-08 17 views
24

Je tente 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?Comment déclarer une variable dans SQL Server et l'utiliser dans la même procédure stockée

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 

Répondre

24

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

Je peux voir les questions suivantes avec ce SP, qui peuvent ou peuvent ne pas se rapporter à votre problème:

  • Vous avez une ) étrangère après @BrandName dans votre SELECT (à la fin)
  • Vous n'êtes pas mise en @CategoryID ou quoi que ce soit à @BrandName partout (ils sont variables locales, mais vous ne donnez pas de valeurs pour les)

Modifier En réponse à votre commentaire: L'erreur vous indique que vous n'avez pas déclaré paramètres pour le SP (et vous ne l'avez pas), 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 pouvez ensuite appeler cela comme ça:

EXEC AddBrand 'Gucci', 23 

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

+0

I obtenez l'erreur suivante: Procédure AddBrand n'a aucun paramètre et arguments ont été fournis. Je corrigé le «) » Je ne sais pas ce que vous entendez sur le CategoryID, j'ai une valeur sur ma page ASPX que j'apporter à la SP et je voudrais ajouter à tblBrandinCategory – Nicklas

+1

@ispostback: Merci pour la faute de frappe correctifs Non, '()' ne sont pas utilisés autour des déclarations de paramètres dans ['CREATE PROCEDURE'] (https://docs.microsoft.com/fr-fr/sql/t-sql/statements/create-procedure-transact- sql). –

1

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

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23 
1
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