• ベストアンサー

T-SQLの sp_executesql について

SQL-Serverでストアドプロシージャを作っています。 EXEC sp_executesql で検索結果をテーブル型変数に格納したいですができるのでしょうか。動的にSQLを発行し、結果を格納する必要がありますのでEXEC sp_executesqlを使わざる得ない状況です。下記にそのサンプルがあります。 Declare @tblAA Table(NO int) declare @strSQL nVarChar(1000) set @strSQL = '' set @strSQL = @strSQL + ' Insert into @tblAA' set @strSQL = @strSQL + ' Select NO from TBLBango' EXEC sp_executesql @strSQL ,N'@tblAA table(No int) OUTPUT', @tblAA OUTPUT Select * from @tblAA これを実行すろと「変数 '@tblAA' を宣言する必要があります。」というエラーがでます。 解決方法を分かる方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9100
noname#9100
回答No.2

質問の回答になってないかもしれませんが、こんな方法もあります。 select * into tbl2 from tbl1 where ・・・ こうすればselectの結果をもとにtbl2が作成されます。ただし、この処理を実行するときにtbl2が存在するとエラーになるのでそれを判断して、ドロップする必要があります。 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tbl2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[tbl2]

その他の回答 (1)

noname#11722
noname#11722
回答No.1

私もやってみましたが、 ストアドの戻りにテーブル型は無理なようです。 ヘルプには明示的に書かれていなかったので、出来るかなとも思ったのですが・・・ なので一時テーブル等を使用したほうがよさそうな感じです。

jaekuk
質問者

お礼

ご回答有難うございます。 やはりだめでしょうか。自分も色々試してみたんですが、だめでした。ということで、カーソルを使ってやることにしました。カーソルは使えました。速度は若干落ちてもBatch処理なので、いいかなあと思います。 有難うございました。 今後とも宜しくお願いします。

関連するQ&A