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

Sql server 必须声明标量变量(存储过程),sql-server,stored-procedures,scalar,Sql Server,Stored Procedures,Scalar,我在一些页面中看到了这个错误,但在我的例子中,我在这里找不到问题 执行我的过程时出错 exec sp_executesql N' EXEC UpdateEmployee @EmployeeID, @Status ',N'@EmployeeID bigint,@Status int',@EmployeeID=2,@Status=5 我得到了以下错误: Msg 137,级别15,状态2,第1行必须声明标量变量 “@StatusID” employee表上的My field StatusID的类型

我在一些页面中看到了这个错误,但在我的例子中,我在这里找不到问题

执行我的过程时出错

exec sp_executesql N' EXEC UpdateEmployee @EmployeeID, @Status ',N'@EmployeeID bigint,@Status int',@EmployeeID=2,@Status=5

我得到了以下错误:

Msg 137,级别15,状态2,第1行必须声明标量变量 “@StatusID”

employee表上的My field StatusID的类型为int,可以为null

我没有忘记声明变量。事实上,它是我的过程中的一个参数。那么,怎么了


更新-已修复


我意识到问题来自图书馆生成的查询。我使用参数@Status而不是@StatusID。这就是问题所在。谢谢您的帮助。

您缺少所需的
开始。。。在多语句SP正文周围结束
。此代码工作正常:

create table Employee (
    StatusID int,
    EmployeeID  int
)
go

CREATE PROCEDURE UpdateEmployee
(
    @EmployeeID BIGINT,
    @StatusID int
)
AS
begin
    IF @StatusID = 0
    BEGIN
        SET @StatusID = null
    END 

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

exec UpdateEmployee 0,0
go
试试这个:

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

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

这样执行

exec sp_executesql N' EXEC UpdateEmployee 2, 5 '

我添加了开始/结束,但什么也没发生。这很奇怪。为什么要使用动态sql执行sp?您可以这样执行它-exec UpdateEmployee@EmployeeID=2,@StatusID=5这是ORM库生成的输出右键单击SSMS中的过程并选择execute。传递参数,看看会发生什么。
exec sp_executesql N' EXEC UpdateEmployee 2, 5 '