SP_ExecuteSQL Generic stored_procedure调用没有输出参数,但捕获输出

时间:2015-09-21 14:05:14

标签: sql-server stored-procedures output sp-executesql

我在这个pb上苦苦思索,我想帮助找出一些解决方案。

在某些TSQL可编程对象(Management Studio中的存储过程或查询)中

我有一个参数,包含存储过程的名称+这些存储过程的必需参数(例如,它在括号[]之间)

@SPToCall的样本

EX1 : [sp_ChooseTypeOfResult 'Water type']
EX2 : [sp_ChooseTypeOfXMLResult 'TABLE type', 'NODE XML']
EX3 : [sp_GetSomeResult]

我无法更改存储过程(并且我没有很好的输出参数来缓存,因为我需要更改存储过程定义)

所有这些存储过程'返回''select'为1记录相同的数据类型,即:NVARCHAR。不幸的是,那些存储过程定义中没有输出参数(否则就太容易了:D)

所以我正在做类似这样的事情,但我找不到任何工作

DECLARE @myFinalVarFilledWithCachedOutput  NVARCHAR(MAX);
DECLARE @SPToCall NVARCHAR(MAX) = N'sp_ChooseTypeOfXMLResult ''TABLE type'', ''NODE XML'';'
DECLARE @paramsDefintion = N'@CatchedOutput NVARCHAR(MAX) OUTPUT'

exec SP_executeSQL @SPToCall , @paramsDefinitions, @CatchedOutput = @myFinalVarFilledWithCachedOutput OUTPUT

-- my goal is to get something inside  @myFinalVarFilledWithCachedOutput  

Select @myFinalVarFilledWithCachedOutput 

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是获取存储过程输出的语法示例,该输出返回选定值并将该输出传递给表变量。

CREATE PROCEDURE tester
AS
    BEGIN
        DECLARE @var VARCHAR(10)
        SET @var = 'beef'

        SELECT  @var
    END
GO


DECLARE @outputtab TABLE ( varfield VARCHAR(100) )

INSERT  @outputtab
        ( varfield )
        EXEC tester

GO

SELECT  *
FROM    @outputtab

如果你想把它变成一个varchar变量,那就从那里开始:

DECLARE @outputvar VARCHAR(100)

SET @outputvar = ( SELECT TOP 1
                            *
                   FROM     @outputtab
                 )