• 締切済み

SQLServer2005 クエリ結果のファイル出力について

SQLServer2005のストアドプロシジャーにて、 クエリの結果をファイルに出力したいのですが、 どのようにすればよろしいでしょうか? xp_cmdshellでSQLCMDを呼び出す以外に方法はありますか?

みんなの回答

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.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ユーティリティ を利用することを強くお勧めします。

参考URL:
http://msdn2.microsoft.com/ja-jp/library/ms187042.aspx
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLServer2005でSELECTした結果(クエリ結果)をS-JISで出力する

    SQLServer2005でSELECTした結果(クエリ結果)をファイル出力した場合、UNICODEで出力されてしまいます。 S-JISで出力する方法をご存じの方、ご教示いただけないでしょうか?

  • SQLServer2005 でSELECTを実行した結果(クエリ結果)がSQLServer2000の時の2倍の大きさになる

    SQLServer2005 でSELECTを実行した結果(クエリ結果)をファイルに出力したところ、同じデータベース項目をSQLServer2000 でSELECTした結果の2倍程度の大きさになる。 ファイルダンプを採取して中身をみたところ、UNICODEでファイル出力されており、すべての半角文字が2バイト表記されていたため、SQLServer2000(こちらは半角文字は1バイト)のほぼ2倍の大きさになっている事が分かりました。 SQLServer2005 でSELECTを実行した結果(クエリ結果)を半角文字は1バイトで出力する良い方法をご存じの方、ご教示いただけないでしょうか?

  • SQLServer2005 抽出結果のファイル保存

    SQLSERVER7.0のクエリアナライザで抽出結果をファイルへ保存する際、ダイアログボックスでファイルフォーマットの指定が出来ましたが、SQLSERVER2005のManagementStudioのダイアログボックスには指定がなく、ANSI形式(カンマ区切り)で抽出結果をCSVファイルに保存したい場合はどのようにしたらよいでしょうか?どなたかご教授よろしくお願いいたします。

  • SqlServer2012 ビューとクエリ

    SqlServerにおける、ビューとクエリについて、その違いというか、概念を教えてください。 私は、最初にAccessと「標準SQL」という本で、データベースを学びました。 本を読んでAccessに向かったときに、クエリってビューのことなのかな?と思って、ずっとやってきました。 ところが、SqlServerには、両方の言葉が出てきます。で、とりあえず、クエリをデザイナで作ってみて、クエリにクエリを内包するようなものを作る段になって、クエリが追加できなことに気づきました。Accessでクエリのタブがあるところに、ビューというタブがあるので、クエリの代わりに、ビューを作りました。まったく同じ手順で作れましたが、保存するときに、「OrderBy句は、ビュー定義のTOP句によって返される行を決定するためだけに使用されます。したがってクエリ自体でもOrderByが指定されていないと、ビューでクエリを実行したときに結果が並べ替えられ宇保証はありません。」 などと、表示されます。 ビューでクエリを実行するとは、どういう事なのでしょうか?クエリを実行するのと、ビューを実行(?)するのは、何か違うのでしょうか?

  • SELECT結果の16進表示の相違(SQLServer2005 vs 2000)

    SQLServer2000で項目値"123"のA項目をSELECTした結果をファイル出力した場合(SELECT A from テストテーブル) 処理結果ファイルを16進で表示すると ""31 32 33"" ですが SQLServer2005で同様に結果をファイル出力した場合、"31 00 32 00 33"のように1バイトごとにnull(""00"")が挿入されてしまいます。 この事象を回避する方法をご存じの方ご教示いただけないでしょうか?

  • SSMSEを使ったクエリ結果をエクセルで出力したい

    SSMSE(SQLServerManagementStudioExpress)を使用してクエリを作成し、問題なく結果が出ました。そのデータをエクセルなどで出力する方法はあるのでしょうか。現在はコピペでやっています。宜しくお願いいたします。

  • SQL ServerのテーブルをCSVへ出力したい

    お世話になっております。 httpで、インターネット経由にて SQL Serverのテーブルから条件に合致したデータをCSVへ出力しダウンロードする 仕組みを作りたいと考えております。 例 ■テーブルA KeyA 項目1 項目2 001 100 200 002 200 250 003 300 350 select * from KeyA =para paraはパラメタとして渡し、結果をpara.CSVのようにCSVファイルへ出力したいのです。 sqlcmdを使えば、できそうな感じだったのですがよくわからなかったのが (1)sqlcmdのSQL文にパラメタを渡すことができるのか、できるのならどうやるのか (2)出力ファイル名もパラメタ化したいのだができるのか、できるのならどうやるのか (3)ネット経由でsqlcmdを実行することができるのか、できるのならどうやるのか (環境) SQLServer2008R2 IIS ご教授頂けましたら大変ありがたいです。 よろしくお願いいたします。

  • SQLServer sqlcmdが使えない

    * 困っています まだ大分初心者のひよこですが、 SQLServer2005をSQLCMDを使って操作しようと思っているのですが、 SQLServer2005をインストールしてコマンドプロンプトから操作しようとしても、 「'sqlcmd' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と出てしまいます。 PATH設定とか必要なのでしょうか? もしくは足りないソフトとかありますでしょうか? こんな質問で申し訳ありませんが、 宜しければ教えて下さい<(_ _;)> OS: Vista SQL SERVER 2005 Express Edition (SQLEXPR_JPN.EXE)

  • bcpによる、テーブル→CSVファイル出力について

    bcpによる、テーブル→CSVファイル出力について SQL Server(2003)のクエリアナライザからテーブル->ファイル出力を試みたのですが、うまくいきません。 サーバからの実行ではなく、クライアントのEnterpriseManagerのクエリ実行です。 このエラーは、サーバ接続自体がうまくいってないということでしょうか? exec master.dbo.xp_cmdshell 'bcp xxxxx.dbo.コピー元テーブル名 out C:\AAA.csv -c -S サーバ名 -U 接続ID名 -P 接続パスワード' 実行結果 SQL Status=S1000 ,NativeError=0 Error=[Microsoft][ODBC SQL Server Driver]一括コピーホストのデータファイルが開けません。 csv->テーブルについては、BULK INSERTで問題無く取り込めているので、単純に逆を行いたいだけです。 bcp使わない方法があれば、それでもいいのですが。。。。。

  • SQLServerのデータをCSVファイルに出力したい

    VB6.0(SP5) Windows2000(SP3) SQLServer2000(SP3) で開発しています。 VBで、SQLServerのデータをCSV形式で出力したいのですが、どのようにすればいいか教えてください。 一旦データを取得して、それを1行ずつ書いていく。 というやり方ならイメージできるのですが、もっと簡単というか、処理の早い方法があるのかなと思いまして(SQLServerの機能で何かあるかなとか)、教えて頂きたいのです。 よろしくお願いします。