wake-up-neo.com

So deklarieren Sie eine Variable in SQL Server und verwenden Sie sie in derselben gespeicherten Prozedur

Ich versuche, den Wert von BrandID in einer Tabelle abzurufen und ihn einer anderen Tabelle hinzuzufügen. Aber ich kann es nicht zum Laufen bringen. Weiß jemand, wie man es richtig macht?

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

Was ist los mit dem, was du hast? Welchen Fehler bekommst du oder welches Ergebnis entspricht nicht deinen Erwartungen?

Ich kann die folgenden Probleme mit diesem SP sehen, die sich möglicherweise auf Ihr Problem beziehen:

  • Sie haben einen ) nach dem @BrandName in Ihrer SELECT (am Ende)
  • Sie setzen @CategoryID oder @BrandName nicht auf irgendwo anders (sie sind lokale Variablen, aber Sie weisen ihnen keine Werte zu).

Edit Antwort auf Ihren Kommentar: Der Fehler weist darauf hin, dass Sie für SP keine parameters deklariert haben (und Sie nicht), aber Sie haben es mit Parametern aufgerufen. Basierend auf Ihrer Antwort zu @CategoryID möchte ich, dass Sie einen Parameter anstelle einer lokalen Variablen haben wollten. Versuche dies:

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

Sie würden das dann so nennen:

EXEC AddBrand 'Gucci', 23

... unter der Annahme, dass der Markenname 'Gucci' und die ID der Kategorie 23 war.

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

In SQL 2012 (und vielleicht schon 2005) sollten Sie Folgendes tun

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

Keine der oben genannten Methoden hat für mich funktioniert, also poste ich so wie ich

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