2012-03-11 75 views
0

我知道這是一個基本問題 - 但我無法找到完成此操作的正確方法。SQL Server - 將變量傳遞給存儲過程時遇到問題

我需要將一個變量傳遞給SQL Server 2008存儲過程並返回查詢。

這裏的存儲過程:

CREATE PROCEDURE pOrders 
AS 
    DECLARE @enteredClientID varchar(20); 
    DECLARE @Results table (ClientID varchar(20), Num_orders int); 
BEGIN 
    SET NOCOUNT ON; 

    -- Get all the order from the client 
    INSERT INTO @Results 
     SELECT ClientID, sum(Num_orders) 
     FROM Orders O 
     WHERE O.ClientID = @enteredClientID 
     GROUP BY O.ClientID); 

    -- Insert the orders into the results table -- 
    SELECT * 
    FROM @Results; 

END 
GO; 

現在,我將執行存儲過程並得到結果回來:

exec pOrders 
set @enteredClientID = 'ABC123456789' 

我收到此錯誤信息後面:

必須聲明標量變量「@enteredClientID」。

但是,我聲明變量....我錯過了什麼?

回答

2

你沒有聲明參數,但局部變量。聲明一下,你想:

CREATE PROCEDURE pOrders (@enteredClientID varchar(20)) 
AS 
    DECLARE @Results table (ClientID varchar(20), Num_orders int); 

    SET NOCOUNT ON; 

    -- Get all the order from the client 
    INSERT INTO @Results 
    SELECT ClientID, sum(Num_orders) 
    FROM Orders O 
    WHERE O.ClientID = @enteredClientID 
    GROUP BY O.ClientID); 

    -- Insert the orders into the results table -- 
    SELECT * 
    FROM @Results; 

GO; 

的稱之爲:

exec pOrders @enteredClientID = 'ABC123456789' 

或者乾脆

exec pOrders 'ABC123456789' 
1

--in存儲過程

DECLARE @enteredClientID varchar(20) OUTPUT 

--Then插入並設置身份

SELECT SCOPE_IDENTITY() AS @enteredClientID 

- 當調用過程: - 聲明變量來保存返回值

DECLARE @enteredClientID VARCHAR(20); 

- 執行返回值的過程。

EXEC @enteredClientID = pOrders 
0

嘗試EXEC pOrders'ABC123456789'。

您提供的調用嘗試執行過程(不傳遞任何參數),然後嘗試設置名爲@enteredClientID的變量。由於您尚未在執行代碼的範圍內聲明@enteredClientID,因此無法對其進行設置。

有關如何與程序使用參數的詳細信息,這篇文章可能會有所幫助: http://msdn.microsoft.com/en-us/library/ms189915.aspx

+0

只是一個建議:它可能是有意義的使用表值函數而不是一個滿足這種需求的程序......但這超出了問題的範圍:-) – Rose 2012-03-12 00:07:04

相關問題