必须声明标量变量(存储过程)

时间:2016-01-12 14:22:55

标签: sql-server stored-procedures scalar

我在某些页面中看到了这个错误,但就我而言,我在这里找不到问题。

执行我的程序时出错。

exec sp_executesql N' EXEC UpdateEmployee @EmployeeID, @Status ',N'@EmployeeID bigint,@Status int',@EmployeeID=2,@Status=5
CREATE PROCEDURE UpdateEmployee
(
    @EmployeeID BIGINT,
    @StatusID int
)
AS

IF @StatusID = 0
BEGIN
    SET @StatusID = null
END 

UPDATE Employee SET StatusID = @StatusID WHERE EmployeeID = @EmployeeID
GO

我收到以下错误:

  

Msg 137,Level 15,State 2,Line 1必须声明标量变量   " @ StatusID"

表employee上的我的字段StatusID是int类型和可以为空的

我没有忘记申报变量。实际上,它是我程序的IN参数。那么,有什么不对?

更新 - 修正

我意识到问题来自库生成的查询。我使用参数@Status而不是@StatusID。那就是问题所在。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您在多语句SP正文周围缺少必需的long long computeTotalSize(const vector<Record<T>>& recordVector) 。这段代码工作正常:

BEGIN ... END

答案 1 :(得分:1)

你的proc如何执行它没有问题。 由于您是动态执行它,因此必须声明您在动态查询中传递的参数。

像这样执行

exec sp_executesql N' EXEC UpdateEmployee 2, 5 '

答案 2 :(得分:0)

试试这个:

CREATE PROCEDURE UpdateEmployee
(
    @EmployeeID BIGINT,
    @StatusID int
)
AS
UPDATE Employee SET StatusID = NullIf( @StatusID, 0 ) WHERE EmployeeID = @EmployeeID
GO