私はこのようなことをしたい:
declare @var varchar(50) = '2';
exec sp_myprocedure 'first', 'sec ' + @var
しかし、エラーが発生します:
Incorrect syntax near '+'.
もちろん、execプロシージャの前に変数を設定できます。
set @var = 'sec ' + @var;
しかし、コードで多くの実行があり、100万個の変数を作成したくないので、これは必要ありません。
私はこのようなことをしたい:
declare @var varchar(50) = '2';
exec sp_myprocedure 'first', 'sec ' + @var
しかし、エラーが発生します:
Incorrect syntax near '+'.
もちろん、execプロシージャの前に変数を設定できます。
set @var = 'sec ' + @var;
しかし、コードで多くの実行があり、100万個の変数を作成したくないので、これは必要ありません。
申し訳ありませんが、コードを修正する必要があります。これを合法にする魔法はありません:
EXEC dbo.procedure_name @var + 'constant';
また、ストアドプロシージャのプレフィックスの使用を停止sp_
します。
を使用している場合、プロシージャの実行で文字列の連結を使用することはできないと思いますEXEC
。
これから:_
ストアドプロシージャまたは関数を実行します
[{EXEC | 実行する } ]
{ [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] } [;]
は値@parameter
である必要があります。しかし、これは:式です。'sec ' + @var
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