3

私はこのようなことをしたい:

declare @var varchar(50) = '2';
exec sp_myprocedure 'first', 'sec ' + @var

しかし、エラーが発生します:

Incorrect syntax near '+'.

もちろん、execプロシージャの前に変数を設定できます。

set @var = 'sec ' + @var;

しかし、コードで多くの実行があり、100万個の変数を作成したくないので、これは必要ありません。

4

3 に答える 3

12

申し訳ありませんが、コードを修正する必要があります。これを合法にする魔法はありません:

EXEC dbo.procedure_name @var + 'constant';

また、ストアドプロシージャのプレフィックスの使用を停止sp_します。

于 2013-03-11T17:03:43.483 に答える
11

を使用している場合、プロシージャの実行で文字列の連結を使用することはできないと思いますEXEC

これから:_

ストアドプロシージャまたは関数を実行します

[{EXEC | 実行する } ]

{ 
  [ @return_status = ]
  { module_name [ ;number ] | @module_name_var } 
    [ [ @parameter = ] { value 
                       | @variable [ OUTPUT ] 
                       | [ DEFAULT ] 
                       }
    ]
  [ ,...n ]
  [ WITH <execute_option> [ ,...n ] ]
} [;]

@parameterである必要があります。しかし、これは:です。'sec ' + @var

于 2013-03-11T16:22:53.733 に答える
9

100万個の変数を宣言する必要はありません。単一の変数を宣言し、それぞれの前に設定するだけですEXEC

DECLARE @cmd nvarchar(max) = '';

declare @var varchar(50) = '2';

set @cmd = 'sec ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'try ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'foo ' + @var;
exec sp_myprocedure 'first', @cmd

set @cmd = 'bar ' + @var;
exec sp_myprocedure 'first', @cmd
于 2013-03-11T17:27:42.183 に答える