如何在SQL Server中声明变量并在同一存储过程中使用它

Nic*_*las 43 sql-server stored-procedures local-variables

我试图从一个表中获取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
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 44

你有什么问题?你得到了什么错误,或者你得到的结果与你的期望不符?

我可以看到该SP的以下问题,这些问题可能与您的问题有关,也可能与您的问题无关:

  • 在你的(最后))后你有一个无关紧要的@BrandNameSELECT
  • 你没有设置@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
Run Code Online (Sandbox Code Playgroud)

然后你会这样称呼:

EXEC AddBrand 'Gucci', 23
Run Code Online (Sandbox Code Playgroud)

...假设品牌名称为'Gucci'且类别ID为23.