- 締切済み
SQLServer2005 クエリ結果のファイル出力について
SQLServer2005のストアドプロシジャーにて、 クエリの結果をファイルに出力したいのですが、 どのようにすればよろしいでしょうか? xp_cmdshellでSQLCMDを呼び出す以外に方法はありますか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kero_mio
- ベストアンサー率90% (94/104)
xp_cmdshellでSQLCMDを使いたくないということは、 xp_cmdshell経由で、bcpを使いたくないということでしょうか? ■一括インポート操作とエクスポート操作 http://msdn2.microsoft.com/ja-jp/library/ms187042.aspx ■BCPを使った例 DECLARE @filePath nvarchar(max) DECLARE @bcpCmd varchar(max) SET @filePath = 'c:\aaa.txt' SET @bcpCmd = 'bcp "SELECT * FROM TABLE" queryout "' SET @bcpCmd = @bcpCmd + @filePath + '" -U username -P pw -password' EXEC master..xp_cmdshell @bcpCmd また、上記のようなxp_cmdshell経由でBCPも使えないとか、制限があるのであれば、OPENROWSETを使えばできないことはないです。 (ただ、いろいろとテキストファイル側の項目定義フォーマットが 別で必要なので、下記だけでは動かないです。 とりあえず、こんな感じですということで掲載します) INSERT INTO OPENROWSET('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\;','select * from aaa.txt') SELECT * FROM テーブル を使った、ファイル生成もありますが、 デフォルトのSQL Serverのセキュリティ設定(Ad Hoc Distributed Queries)が有効になっていないと、使えなかったと 記憶してます。 ■セキュリティ「Ad Hoc Distributed Queries」を有効にする方法。 EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO これで、OPENROWSETを使ってテキストファイルに吐けるようには なるはずですが、いずれにしても、OPENROWSETを使って書き出すのは、 セキュリティ上、お勧めしかねるのと、サーバーの設定を 変えるメリットがないため、素直にxp_cmdshellか bcpユーティリティ を利用することを強くお勧めします。