如何将动态执行的存储过程的结果存储到变量中?

时间:2017-03-30 13:35:33

标签: sql sql-server stored-procedures

我正在尝试将动态执行的存储过程的结果分配给变量。但是,当我打电话给他们时,sql抛出这个错误:

  

找不到存储过程'exec dbo.cont_com 3611,892;'

以下是我正在使用的代码段:

fetchURLs()

当我放括号并执行存储过程时,它可以正常工作:

declare @procedure_to_call varchar(max);
declare @procedure_result int;

set @procedure_to_call='exec dbo.cont_com 3611,892;'

exec @procedure_result=@procedure_to_call;

但我需要在变量中保存 @procedure_to_call 的返回。

这是 dbo.cont_com SP的示例代码:

exec (@procedure_to_call);

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

set @procedure_to_call='exec dbo.cont_com 3611,892;'

exec @procedure_result=@procedure_to_call;

这变为

exec exec dbo.cont_com 3611,892; -- hence the error

exec (@procedure_to_call)通过将括号中的内容作为自己的活动来解决这个问题

尝试:

set @procedure_to_call='dbo.cont_com 3611,892;'

答案 1 :(得分:1)

尝试这样的事情。

DECLARE @procedure_to_call NVARCHAR(MAX) = 'EXEC @x = dbo.cont_com 3611,892'
DECLARE @procedure_result INT;
SET @procedure_result = 0;

EXEC sp_executesql @procedure_to_call, N'@x INT OUT', @procedure_result OUT;
SELECT @procedure_result

它对我有用,希望它适合你。