2010-05-08 50 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 
相關問題