在动态 SQL 中使用 OUTPUT 参数调用存储过程

use*_*673 4 sql-server stored-procedures dynamic-sql output

我正在OUTPUT使用动态 SQL调用带有参数的存储过程。

set @cSql='EXEC '+@cName+'.dbo.uspNDateGet '''
    +convert(varchar(10),@dtAsOn,102)+''','''
    +@cBr+''','''
    +@cLCode+''','''
    +convert(varchar(10),@dtNDate,102)+''' OUTPUT'

exec(@cSql)
Run Code Online (Sandbox Code Playgroud)

在执行脚本时,我收到以下错误。

OUTPUT将常量传递给存储过程时不能使用该选项。

在不使用动态 SQL 的情况下,脚本给了我所需的结果。

EXEC uspNDateGet @dtAsOn,@cBr,@cLCode,@dtNDate OUTPUT
Run Code Online (Sandbox Code Playgroud)

SQL*_*ice 5

您需要将参数从外部传递到内部查询中。

在这里,我向您展示一般情况:

declare @sql nvarchar(max);

declare @Out1 nvarchar(10);
declare @Out2 nvarchar(10);

declare @ParmDef nvarchar(max);

set @ParmDef = 
      '  @Parm_Out1 nvarchar(10) '
    + ', @Parm_Out2 nvarchar(10) ' ;

set @sql='EXEC myproc @Parm_Out1 OUTPUT, @Parm_Out2 OUTPUT '

exec sp_executesql @sql, @ParmDef, @Parm_Out1 = @Out1, @Parm_Out2 = @Out2
Run Code Online (Sandbox Code Playgroud)