Как объявить переменную в 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$$