2
declare @qry as varchar(max)
declare @db as varchar(25)
declare @item as varchar(25)
declare @U_Parentcode as varchar(25)


set @U_Parentcode ='CDM51306520'
set @db ='Marda_Test'
set @qry ='select @item =itemcode from ' + @db + '.[dbo].[OITM]  where ItemCode=''' + @U_Parentcode +''''
execute (@qry)
print @item

「スカラー変数 "@item" を宣言する必要があります」のようなエラーが発生しています。

4

2 に答える 2

3

動的 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 番目 (および後続の) パラメーターは、どの内部パラメーターをどの外部パラメーターにマップする必要があるかを示すマッピングです。出力句 (変数宣言とマッピングの両方で使用される) は、そのパラメーターがクエリの出力値として使用されることを示す指定子です。

于 2013-09-04T06:51:54.210 に答える
0

あなたのdeclare発言は@qryコンテンツに含まれていません。

さらに、なぜあなたは気にしているのexecuteですか?通常のクエリを使用しないのはなぜですか。正しいデータベースに接続して通常のクエリを実行するように、接続文字列をパラメーター化します。

于 2013-09-04T06:46:44.990 に答える