SQL Server - 无法将变量传递给存储过程

时间:2012-03-11 23:43:19

标签: sql-server sql-server-2008 stored-procedures

我知道这是一个基本问题 - 但我无法找到完成这项工作的正确方法。

我需要将变量传递给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"。

但是,我宣布变量......我错过了什么?

3 个答案:

答案 0 :(得分: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 :(得分:1)

- 在存储过程中

DECLARE @enteredClientID varchar(20) OUTPUT

- 然后插入并设置身份

SELECT SCOPE_IDENTITY() AS @enteredClientID

- 调用程序时: - DECLARE变量保存返回值

DECLARE @enteredClientID VARCHAR(20);

- 执行返回值的过程。

EXEC @enteredClientID = pOrders

答案 2 :(得分:0)

尝试EXEC pOrders'ABC123456789'。

您提供的调用尝试执行该过程(未传递任何参数),然后尝试设置名为@enteredClientID的变量。由于您尚未在执行代码的范围内声明@enteredClientID,因此无法对其进行设置。

有关如何将参数与过程一起使用的更多信息,本文可能会有所帮助: http://msdn.microsoft.com/en-us/library/ms189915.aspx