当前位置: 首页 > 面试题库 >

将SQL Server存储过程的值输出获取到变量中

漆雕嘉平
2023-03-14
问题内容

这似乎是一个简单的问题,但是我还没有找到答案。

我有以下存储过程

CREATE PROCEDURE [dbo].[AllocateId]
AS
  BEGIN TRANSACTION

  UPDATE TOP(1) IdReservation 
  SET IsAllocated = 1
  OUTPUT DELETED.Id
  WHERE IsAllocated = 0

  COMMIT TRANSACTION
  GO

它已通过ExecuteFunctionObjectContext在C#+ EF代码中使用,没有问题

ObjectResult<int> objectResult = ExecuteFunction<int>("AllocateId");

但是,当我尝试直接从SQL脚本调用它时,它似乎不起作用

declare @Id int
EXEC @Id = [dbo].[AllocateId]

@Id 始终为0。如何在sql脚本中将值获取到@Id变量中?


问题答案:

过程返回值不同于该过程返回的结果集。您的存储过程返回一个结果集,并且不返回任何返回值(最终为null0在退出过程时将被隐式转换为)。
为了获得结果集,您需要对现有过程进行调整,您需要insert ... exec

declare @t table (id int);

insert into @t
exec [dbo].[AllocateId];

如果还要返回一个值作为返回值,则应修改存储过程:

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;

然后它将按照您在问题中描述的方式工作。



 类似资料:
  • 本文向大家介绍将列的值存储到MySQL存储过程的变量中,包括了将列的值存储到MySQL存储过程的变量中的使用技巧和注意事项,需要的朋友参考一下 要声明变量,请在MySQL存储过程中使用DECLARE。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是创建存储过程并将上述表的列值存储在存储过程变量中的查询- 调用存储过程- 这

  • 问题内容: 我在JavaScript中有以下代码: PHP代码:- 注意:我不希望在表单提交中使用它。我在JavaScript中有一些逻辑,我想在同一PHP页面中使用它…请让我知道我该怎么做。 问题答案: 您必须记住,如果JS和PHP位于同一个文档中,则将首先在服务器上执行PHP,然后在浏览器上执行JS,并且两者将永远不会交互(除非您在哪里用PHP输出JS,这实际上不是两个引擎之间的交互)。 考虑

  • 问题内容: 将从大型文本文件提取的列表中返回最大的列表,但是如何将输出存储为变量? 问题答案: 使用命令替换: 另外,出于可移植性考虑,我建议始终将用作参数。我遇到了一些无法使用的化身。

  • 问题内容: 在MS SQL 2008R2上,我希望能够将消息输出捕获到变量中。我需要在许多数据库上运行脚本。捕获消息输出(来自print或raiserror的消息)并将其记录到表中。我需要从存储过程中执行此操作。 对于此脚本 我想得到 或者 更新 我决定接受@rs建议。对我来说,登录表格是最简单的方法。使用SP进行日志记录(以保持代码干净),再加上一个小的正则表达式来重构我的所有脚本。该解决方案将

  • 问题内容: 我需要一个变量来保存从数据库中检索到的结果。到目前为止,这基本上是我正在尝试但没有成功的方法。 如您所见,我对bash命令的理解不是很好。 问题答案: 我对MySQL命令行界面了解不多,但是假设您只需要帮助,可以尝试像下面这样交换命令: 它将字符串回显到MySQL。或者,您可以更喜欢并使用一些新的bash功能(here字符串) 结果相同(假设您使用的是最新的bash版本),而没有涉及e

  • 问题内容: 与PHP中的mysql中的存储过程无关,文档完全缺乏。我目前有一个通过PHP调用的存储过程,如何获取out参数的值? 问题答案: 它看起来像在这篇文章中回答: http://forums.mysql.com/read.php?52,198596,198717#msg-198717 使用mysqli PHP API: 假设sproc myproc(IN i int,OUT j int):