从带有动态 SQL 捕获输出的存储过程执行存储过程

lee*_*rog 4 sql sql-server stored-procedures dynamic-sql

在存储过程 (A) 中,我需要在特定数据库中调用存储过程 (X) 并捕获输出。X 返回单个值。

据我所知,我需要将 X 的数据库名称提供给 A 中的存储过程,并且我需要使用动态 SQL 来构建针对所需数据库的执行查询。

我无法弄清楚的是如何从 A 中的 X 捕获输出以处理结果。

Lan*_*art 5

您可以使用sp_executesql动态调用嵌套的存储过程。

DECLARE @db AS SYSNAME
DECLARE @return_value AS INT
DECLARE @output_value AS INT
DECLARE @sql AS NVARCHAR(MAX)

-- Set your DB name
SET @db = N'mydb'

/*
Use sp_executesql to dynamically pass in the db and stored procedure
to execute while also defining the values and assigning to local variables.
*/
SET @sql = N'EXEC @rtn = ' + @db + '.dbo.[your_stored_procedure] @output OUTPUT'
EXEC sp_executesql @sql
   , N'@rtn AS INT, @output AS INT OUTPUT'
   , @return_value = @rtn
   , @output_value = @output OUTPUT
Run Code Online (Sandbox Code Playgroud)