我在某些页面中看到了这个错误,但就我而言,我在这里找不到问题。
执行我的程序时出错。
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。那就是问题所在。谢谢你的帮助。
答案 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