2012-03-11 77 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

相关问题