Pau*_*aul 1 c# sql stored-procedures entity-framework
这似乎是一个简单的问题,但我还没有找到答案.
我有以下存储过程
CREATE PROCEDURE [dbo].[AllocateId]
AS
BEGIN TRANSACTION
UPDATE TOP(1) IdReservation
SET IsAllocated = 1
OUTPUT DELETED.Id
WHERE IsAllocated = 0
COMMIT TRANSACTION
GO
Run Code Online (Sandbox Code Playgroud)
它已经在C#+ EF代码中使用而没有ExecuteFunctionObjectContext 的问题
ObjectResult<int> objectResult = ExecuteFunction<int>("AllocateId");
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试直接从SQL脚本调用它时,它似乎不起作用
declare @Id int
EXEC @Id = [dbo].[AllocateId]
Run Code Online (Sandbox Code Playgroud)
@Id 始终为0.如何在sql脚本中将值输入@Id变量?
过程返回值与该过程返回的结果集不同.您的存储过程返回一个结果集,并且不返回返回值(最终会返回null,0在退出过程时会隐式转换).
要获取结果集,您的现有过程将返回,您需要insert ... exec:
declare @t table (id int);
insert into @t
exec [dbo].[AllocateId];
Run Code Online (Sandbox Code Playgroud)
如果要将值作为返回值返回,则应修改存储过程:
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;
Run Code Online (Sandbox Code Playgroud)
然后它将以您在问题中描述的方式工作.
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |