動的 SQL はコードのコンテキストとは異なるコンテキストで実行されるため、基本的に@item
変数はそこで宣言されません。
sp_executeSql
変数をブロック内の変数にマップするメカニズムを含む whichを使用する必要があります。構文はややこしいですが、慣れれば一目瞭然です。
declare @qry as nvarchar(max)
declare @db as varchar(25)
declare @outsideItem as varchar(25)
declare @U_Parentcode as varchar(25)
set @U_Parentcode ='CDM51306520'
set @db ='Marda_Test'
set @qry ='select @insideItem =itemcode from ' + @db + '.[dbo].[OITM] where ItemCode=''' + @U_Parentcode +''''
execute sp_executesql @qry, N'@insideItem varchar(25) output', @insideItem = @outsideItem output
print @item
最初のパラメータはクエリで、 と同じexec()
です。
2 番目のパラメーターは、クエリで使用されるすべてのパラメーターの宣言です@insideItem
。
3 番目 (および後続の) パラメーターは、どの内部パラメーターをどの外部パラメーターにマップする必要があるかを示すマッピングです。出力句 (変数宣言とマッピングの両方で使用される) は、そのパラメーターがクエリの出力値として使用されることを示す指定子です。