SP_ExecuteSQL 没有输出参数的通用 stored_procedure 调用,但捕获输出
SP_ExecuteSQL Generic stored_procedure call without output parameters, but catching the output
我正在为这个 pb 苦思冥想,希望得到一些帮助以找出解决方案。
在一些 TSQL 可编程对象中(存储过程或 Management Studio 中的查询)
我有一个参数包含存储过程的名称 + 这些存储过程所需的参数(例如,它在括号 [] 之间)
@SPToCall 示例
EX1 : [sp_ChooseTypeOfResult 'Water type']
EX2 : [sp_ChooseTypeOfXMLResult 'TABLE type', 'NODE XML']
EX3 : [sp_GetSomeResult]
我无法更改这些存储过程(而且我没有很好的输出参数来缓存,因为我需要更改存储过程定义)
所有这些存储过程 'return' 1 个 'select' 记录相同的数据类型,即: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
有什么想法吗?
这是一个语法示例,用于获取 returns 选定值的存储过程的输出并将该输出传递给 table 变量。
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
)
我正在为这个 pb 苦思冥想,希望得到一些帮助以找出解决方案。
在一些 TSQL 可编程对象中(存储过程或 Management Studio 中的查询)
我有一个参数包含存储过程的名称 + 这些存储过程所需的参数(例如,它在括号 [] 之间)
@SPToCall 示例
EX1 : [sp_ChooseTypeOfResult 'Water type']
EX2 : [sp_ChooseTypeOfXMLResult 'TABLE type', 'NODE XML']
EX3 : [sp_GetSomeResult]
我无法更改这些存储过程(而且我没有很好的输出参数来缓存,因为我需要更改存储过程定义)
所有这些存储过程 'return' 1 个 'select' 记录相同的数据类型,即: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
有什么想法吗?
这是一个语法示例,用于获取 returns 选定值的存储过程的输出并将该输出传递给 table 变量。
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
)