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 '