我知道这是一个基本问题 - 但我无法找到完成这项工作的正确方法。
我需要将变量传递给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"。
但是,我宣布变量......我错过了什么?
答案 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