[英]Get value output from SQL Server stored procedure into variable
This seems to be a simple question but nevertheless I haven't found an answer yet. 这似乎是一个简单的问题,但是我还没有找到答案。
I have the following stored procedure 我有以下存储过程
CREATE PROCEDURE [dbo].[AllocateId]
AS
BEGIN TRANSACTION
UPDATE TOP(1) IdReservation
SET IsAllocated = 1
OUTPUT DELETED.Id
WHERE IsAllocated = 0
COMMIT TRANSACTION
GO
It's been used in C# + EF code without a problem via ExecuteFunction
of ObjectContext 它已通过ObjectContext的
ExecuteFunction
用于C#+ EF代码中
ObjectResult<int> objectResult = ExecuteFunction<int>("AllocateId");
However when I try to call it directly from SQL script it doesn't seem to work 但是,当我尝试直接从SQL脚本调用它时,它似乎不起作用
declare @Id int
EXEC @Id = [dbo].[AllocateId]
@Id
is always 0. How do I get the value into @Id variable in sql script? @Id
始终为0。如何在SQL脚本的@Id变量中获取值?
Procedure return value is different from result set(s) returned by that procedure. 过程返回值不同于该过程返回的结果集。 Your stored procedure returns a result set and does not return a return value (which ends up being
null
, which gets converted to 0
implicitly upon exiting the procedure). 您的存储过程返回一个结果集,并且不返回任何返回值(最终为
null
,退出过程隐式转换为0
)。
To get the resultset your existing procedure retuns, you need insert ... exec
: 为了获得结果集,您需要对现有过程进行调整,您需要
insert ... exec
:
declare @t table (id int);
insert into @t
exec [dbo].[AllocateId];
If you want to return a value as a return value as well, you should amend you stored procedure: 如果还要返回一个值作为返回值,则应修改存储过程:
CREATE PROCEDURE [dbo].[AllocateId]
AS
BEGIN TRANSACTION
declare @id int;
UPDATE TOP(1) IdReservation
SET @id = Id, IsAllocated = 1
OUTPUT DELETED.Id
WHERE IsAllocated = 0
COMMIT TRANSACTION
return @id;
Then it will work in the way you describe in the question. 然后它将按照您在问题中描述的方式工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.