SQL Server 字符串执行带有输出参数的过程

won*_*dra 3 sql t-sql sql-server exec

如何在字符串执行中使用输出参数?考虑使用“标准”语法进行以下查询:

DECLARE @testString nvarchar(50);
EXEC testProcedure  @param1 = @testString OUTPUT
SELECT 'result ' = @testString
go
Run Code Online (Sandbox Code Playgroud)

如何使用字符串exec重新创建完全相同的结果,既不

EXEC ( 'testProcedure @param1 = @testString OUTPUT' )
Run Code Online (Sandbox Code Playgroud)

也不

EXEC ( 'testProcedure @param1 = ' + @testString + ' OUTPUT' )
Run Code Online (Sandbox Code Playgroud)

似乎有效:结果是NULLMust declare the scalar variable "@testString"错误。

Luk*_*zda 5

您需要将该值作为参数传递。动态 SQL 在新上下文中执行,这就是变量在那里不可见的原因。

你应该使用sp_executesql

DECLARE @testString nvarchar(50);

EXEC dbo.sp_executesql N'EXEC testProcedure @testString OUTPUT',
                       N'@testString nvarchar(50) OUTPUT',
                       @testString OUTPUT;

SELECT 'result ' = @testString;
Run Code Online (Sandbox Code Playgroud)

LiveDemo