使用/ dynamic SQL捕获输出从存储过程执行存储过程

时间:2013-12-24 08:56:28

标签: sql sql-server stored-procedures dynamic-sql

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

根据我的理解,我需要为A中的存储过程提供X的DB名称,我需要使用动态SQL来构建针对所需数据库的执行查询。

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

2 个答案:

答案 0 :(得分:3)

您可以使用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 dyanmically 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

答案 1 :(得分:-1)

添加上述答案,以下是通过传递参数动态调用存储过程的方法。

    DECLARE @SpName VARCHAR(1000)          
    SELECT @SpName = DeleteLiveSP FROM dbo.ArchivalInfo (NOLOCK) WHERE TableName = @TableName          


    DECLARE @SqlString nvarchar(2000)        
    DECLARE @ParamDef nvarchar(2000)        

    SET @SqlString = N'exec '+@SpName + ' @CriteriaParam'        
    SET @ParamDef = N'@CriteriaParam XML' 


    EXECUTE sp_executesql @SqlString ,@ParamDef, @CriteriaParam = @Criteria