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

53

我试图从一个表中获取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个回答

57

针对那个存储过程,我发现以下问题可能与你的问题有关:

  • SELECT 结尾处 @BrandName 后面多了一个无用的 )
  • 你没有在任何地方为 @CategoryID 或者 @BrandName 赋值(它们是局部变量,但你没有给它们赋值)

你在评论中说修复了 ) 之后出现了以下错误:

Procedure AddBrand has no parameters and arguments were supplied.

这告诉你该存储过程没有声明任何参数,但你却使用了参数。根据你的回复,我猜想你可能想让 @CategoryID 成为参数而不是局部变量。你可以尝试以下代码:

CREATE PROCEDURE AddBrand
   @BrandName nvarchar(50), -- These are the
   @CategoryID int          -- parameter declarations
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

或者使用这个:

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

假设品牌名称是'Gucci',类别ID为23。


我收到了以下错误信息:Procedure AddBrand没有参数,但提供了参数。我纠正了“)”我不知道你所说的CategoryID是什么意思,我在我的aspx页面上有一个值,我将其带入SP并想添加到tblBrandinCategory中。 - Nicklas

2
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

你确定这行代码没问题吗?"@CategoryID int = null,"好像最后那个逗号不应该在那儿... - blobbles
谢谢blobbles,我已经去掉了逗号。 - Johnny

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

1
在 SQL 2012 中(可能从2005年开始),您应该这样做:
EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接