Sql server 在动态SQL中使用输出参数调用存储过程

Sql server 在动态SQL中使用输出参数调用存储过程,sql-server,stored-procedures,output,dynamic-sql,Sql Server,Stored Procedures,Output,Dynamic Sql,我正在使用动态SQL调用一个带有OUTPUT参数的存储过程 set @cSql='EXEC '+@cName+'.dbo.uspNDateGet ''' +convert(varchar(10),@dtAsOn,102)+''',''' +@cBr+''',''' +@cLCode+''',''' +convert(varchar(10),@dtNDate,102)+''' OUTPUT' exec(@cSql) 在执行脚本时,我得到以下错误 将常量传递给存储

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

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

exec(@cSql)
在执行脚本时,我得到以下错误

将常量传递给存储过程时,无法使用
输出
选项

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

EXEC uspNDateGet @dtAsOn,@cBr,@cLCode,@dtNDate OUTPUT

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

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

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

在动态查询中声明该输出变量。使用带有传递参数的sp_executesql。查找动态sql的输出