ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3658264 SQLServer2005 クエリ結果のファイル出力について
質問者:ankomaki SQLServer2005のストアドプロシジャーにて、
クエリの結果をファイルに出力したいのですが、
どのようにすればよろしいでしょうか?

xp_cmdshellでSQLCMDを呼び出す以外に方法はありますか?
困り度:
  • すぐに回答を!
質問投稿日時:
08/01/07 16:42

回答

ANo.1 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ユーティリティ を利用することを強くお勧めします。
回答者:kero_mio
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/01/09 12:38
参考URL: http://msdn2.microsoft.com/ja-jp/library/ms187042.aspx
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)