Как объявить переменную в SQL Server и использовать ее в той же хранимой процедуре

Я пытаюсь получить значение из BrandID в одной таблице и добавить его в другую таблицу. Но я не могу заставить его работать. Кто-нибудь знает, как это сделать правильно?

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

Ответ 1

Что происходит с тем, что у вас есть? Какая ошибка вы получаете, или какой результат делать или не вы получаете, что не соответствует вашим ожиданиям?

Я вижу следующие проблемы с этим SP, которые могут или не могут быть связаны с вашей проблемой:

  • У вас есть посторонний ) после @BrandName в SELECT (в конце)
  • Вы не устанавливаете @CategoryID или @BrandName для чего-либо в любом месте (это локальные переменные, но вы не присваиваете им значения)

Изменить. Ответ на ваш комментарий: ошибка говорит вам, что вы не указали какие-либо параметры для SP (а у вас их нет), но вы вызвали его с параметрами. Основываясь на вашем ответе о @CategoryID, я предполагаю, что вы хотите, чтобы это был параметр, а не локальная переменная. Попробуйте следующее:

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

Затем вы вызываете это следующим образом:

EXEC AddBrand 'Gucci', 23

... при условии, что название бренда было "Gucci", а идентификатор категории - 23.

Ответ 2

В sql 2012 (и, возможно, еще в 2005 году) вы должны сделать это:

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

Ответ 3

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

Ответ 4

Ни один из вышеперечисленных методов не помог мне, поэтому я пишу так, как сделал

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$$