【问题标题】:How do I set a local variable to the returned value from an execute in SQL如何将局部变量设置为 SQL 中执行的返回值
【发布时间】:2021-10-12 20:52:32
【问题描述】:

在下面的代码中,我试图将一个局部变量设置为从 TSQL 中的执行语句返回的值。

声明的变量:@id 执行接受一个类型和一个增量数量,并返回一个值 期望的结果是设置返回给变量@id的值

下面的 select 语句将 @id 显示为 0,并且执行似乎正在返回该值但未将其设置为 @id。研究/谷歌搜索表明这是我应该如何将局部变量设置为执行语句返回的内容,但我显然做得不对。

declare @id int = -1 
exec @id = AP_GET_NEXTID @type = 'CT', @increment = 1
print @id
select @id

下一个 ID 似乎已返回但未设置为 @id 字段。

【问题讨论】:

  • 您需要使用 INSERT #TempTable EXEC 才能从 PROC 中获取结果。然后你可以选择值到你的变量中
  • 考虑将 NextID 值作为输出参数而不是结果集返回。这将使您的生活更轻松。
  • @DanGuzman 在哪里可以找到输出参数的语法而不是结果集?我想这就是我认为我在做的事情。
  • documentation 显示语法。如果您将名为 @NextId 的输出参数添加到 proc 中,请将其称为 EXEC AP_GET_NEXTID @type = 'CT', @increment = 1, @NextId = @id OUTPUT;

标签: sql sql-server tsql exec local-variables


【解决方案1】:

尝试类似...

CREATE TABLE #Result ( NextID int )

DECLARE @id int

INSERT #Result exec AP_GET_NEXTID @type = 'CT', @increment = 1

SELECT TOP 1 @id = NextID FROM #Result

PRINT @id

SELECT @id

【讨论】:

  • 谢谢。这是新事物吗?过去我几乎可以肯定我能够声明一个变量并将其设置为等于从执行语句或函数返回的值。这是处理或语言的变化吗?
  • @YelizavetaYR ... 返回值或 PROC 由 PROC 中的 RETURN 语句决定。不是通过 SELECT 结果。如果 PROC 选择结果并返回它,那将正常工作。既然是查询结果,就得用这个方法。问题是......你能改变你打电话的PROC吗?如果是这样,您可以使用输出参数或直接返回值。
  • Return is for status / error codes, not for data。如果可以更改过程,请使用输出参数,而不是 RETURN 语句。
  • @AaronBertrand 基于链接为什么我不能只写 EXEC hr = sys.sp_columns table_name = N'dbo.bar';为什么那不起作用(我必须从执行中删除 at 符号,否则它不会让我发表评论)
  • @YelizavetaYR 因为RETURN 不会做你认为的那样。当您为具有三列的表调用 EXEC @hr = sys.sp_columns @table_name = N'dbo.bar'; 时,您认为会(或想要)以单个变量 @hr 结束?您认为(或希望)SQL Server 在该单个整数中存储什么?提示:该存储过程的 return 语句返回有关成功 (0)/failure(<error code>) 的信息,而不是有关您的表或其中任何列的任何信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2018-08-28
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多