2010-05-08 46 views
24

我试图从一个表中的BrandID获取值并将其添加到另一个表中。但我无法让它工作。任何人都知道如何做对吗?如何在SQL Server中声明变量并在相同的存储过程中使用它

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 

回答

24

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

我可以看到与SP,这可能会或可能不会涉及到你的问题如下问题:

  • 你有一个多余的)SELECT@BrandName后(末)
  • 你”再没有任何地方设置@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 

...假设品牌名称是 '古奇' 和类别ID是23

+0

我得到以下错误:过程AddBrand没有参数并提供参数。 我更正了“)” 我不知道你的意思是关于CategoryID,我在我的aspx页面上有一个值,我把它带到SP并想添加到tblBrandinCategory – Nicklas 2010-05-08 08:28:06

+1

@ispostback:谢谢你的错字修复。不,在['CREATE PROCEDURE']的参数声明中不使用'()'(https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-procedure-transact- SQL)。 – 2017-12-10 08:24:12

1

在SQL 2012(也许早在2005年),你应该这样做:

EXEC AddBrand @BrandName = 'Gucci', @CategoryId = 23 
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 
相关问题