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

时间:2010-05-08 08:10:30

标签: 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

4 个答案:

答案 0 :(得分:41)

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

我可以看到该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'且类别ID为23。

答案 1 :(得分:1)

在sql 2012中(可能早在2005年),你应该这样做:

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

答案 2 :(得分: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

答案 3 :(得分:1)

以上方法均不适用于我,因此我将按照我的方式发布

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