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

时间:2020-12-12 19:18:25

I am calling a stored procedure with OUTPUT parameter using 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)

On executing the script, I get following error.

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

Cannot use the OUTPUT option when passing a constant to a stored procedure.

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

Without using dynamic SQL, the script gives me the required result.

不使用动态SQL,脚本为我提供了所需的结果。

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

1 个解决方案

#1


3  

You need to pass parameters from outside into the inside query.

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

Here I show you the generic case:

在这里,我向您展示一般案例:

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

#1


3  

You need to pass parameters from outside into the inside query.

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

Here I show you the generic case:

在这里,我向您展示一般案例:

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