【问题标题】:Execute Stored Procedure from Stored Procedure w/ dynamic SQL capturing output从带有动态 SQL 捕获输出的存储过程执行存储过程
【发布时间】:2013-12-24 08:56:27
【问题描述】:

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

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

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

【问题讨论】:

  • 你应该可以使用sp_executesql 来做到这一点,比如EXEC sp_executesql N'EXEC @rtn = ' + @db + N'.dbo.[your_stored_procedure] @output OUTPUT', N'@rtn AS INT, @output AS INT OUTPUT', @yourlocalvar1 = @rtn, @yourlocalvar2 = @output,这只是我的想法,可能需要一些调整。

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


【解决方案1】:

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

【讨论】:

  • 谢谢,您的回答让我找到了可行的实施方案!
【解决方案2】:

除了上面的答案,下面是通过传递参数动态调用存储过程的方法。

    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  

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多