SQLでselectしたデータをinsert文として出力したいときがあると思います。
初期データとしていれたデータを構築時にSQL流すだけで構築できるようにしたい場合とかです。
OracleのSQL Developerの感覚でManagement Studioでエクスポートしようとしたらできないところから始まりました。
Oracleだと結果をエクスポートって簡単にできます。結果のグリッドでエクスポートを選んでクリップボードにinsert文を出力するとか朝飯前です。
そんな感じでOracleに慣れていたのでManagement Studioで結果のグリッドを選んでもファイル出力しかできません。
そこで調べるとManagement Studioにはスクリプトの生成という機能があり、テーブルからinsert文を生成してくれるというドンピシャな機能がありました。
これだ!と思いウィザードを進めると条件を入力するところがありません。。
そうです。テーブルの全データしか出力できないんです。
大は小を兼ねるということでこれで事足りるときもありますが、一部データを出力したいときもありますがな。
これはどうすっかなーと小一時間考えて思いつきました。
一時的にテーブルに作るしかないと。
幸いSQLとは便利なものでintoを使うと簡単にテーブルを作れます。
以下のような感じのSQLで。
select * into temp_hogehoge from hogehoge where col = 'xxxx'
で、この一時的なテーブルをManagement Studioでスクリプト生成すれば完成です。
ちなみに詳細設定でデータのみにすることを忘れずに。
クリップボードにも出せます。
まとめると、SQLServerでselectした結果のデータをinsert文としてSQLでエクスポートしたい場合は、select intoで一時テーブルを作ってスクリプト生成するべし。
ちなみにこの方法はSQL Server 2008*1での話なので、最新バージョンではOracleみたいにできるようになっているかもしれません。いや、きっとできるはず。
この方法を思いつくのに意外と時間かかったので忘れないように記録しておきます。
*1:なんでこんな10年前ほどのバージョンを使っているかというと顧客指定だからです