SP_ExecuteSQL不带输出参数的通用stored_procedure调用,但捕获输出



我对这个问题很头疼,希望有人能帮我想出解决办法。

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

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

@SPToCall的示例

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

我不能更改这些存储过程(而且我没有一个好的输出参数来缓存,因为我需要更改存储过程定义)

所有这些存储过程'return' a 'select' of 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 

有什么想法吗?

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

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
                 )

相关内容

  • 没有找到相关文章

最新更新