• 締切済み

[SQL Server] コマンドプロンプトからのCSV形式出力

SQL ServerのテーブルデータをSELECTしてダブルコーテ区切りのCSVに出力したいと考えております。 ・batファイルからの起動を希望。 ・出力CSVファイル名はbatファイルより引数で指定したい。 ・出力後、DELETEも行いたい。 OracleだとSQL*Plus環境で下記のようにテキストレベルで簡単にできます。 SQL Serverでも同様のことができないでしょうか? 要は下記をSQL Server版でやりたいということです。 参考:Oracleだと・・・ 同一dirに、abc.batとabc.sqlを用意しabc.batを実行すると20070601.csvが生成される。 1.abc.bat rem ----abc.bat-ここから---- sqlplus usr/pwd@host @abc.sql 20070601.csv rem ----abc.bat-ここまで---- 2.abc.sql ----ファイル名=abc.sql-ここから--- set echo off set heading off SET VERIFY OFF set FEEDBACK OFF set TRIMSPOOL on set termout off set pagesize 0 set linesize 32767 spool &1 select '"'|| カラム1 ||'",'|| '"'|| カラム2 ||'",'|| '"'|| カラム3 ||'"' from テーブル1; spool off delete from テーブル1; exit ----ファイル名=abc.sql-ここまで--- 20070601.csv結果 -ファイル名=20070601.csv-ここから--- "20060726","scott","356160" "20060727","tiger","463391" "20060728","manager","1930" -ファイル名=20070601.csv-ここまで--- DBサーバ環境 OS:Win2003SvrR2 SQL Serverバージョン:わかりません。(2003にのってるので最近のだと思われます) Oracle経験者でSQLServer初心者です。マニュアルもなく、Web検索しても「SQL」「Server」ってなかなかうまくひっかからない!! ので質問あげさせていただきます。

みんなの回答

回答No.1

SQL Serverのこの辺の機能については、あまり詳しくないのですが。。。 >マニュアルもなく、Web検索しても オンラインマニュアルがあります。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/coprompt/cp_bcp_61et.asp 質問者さんの細かな要件に合致しているかは不詳ですが、csv出力はbcpユティリティで行なえるようです。 http://homepage1.nifty.com/kojama/works/rdbms/mssql/misc.html#term03

dokkiricha
質問者

お礼

基本はbcpユーティリティなのですね。調査、テストしてみます。アドバイスありがとうございます。

関連するQ&A

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題は13,4件に1行改行されてしまいます。 この改行を省くことができるでしょうか? --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • SQL*Plus:SPOOLコマンドでのSQL出力

    Oracle SQL*Plusで、SPOOLコマンドを使用すると、SQL実行の結果はファイルに出力されますが、実行したSQL自身が出力されません。 SETコマンドで制御できるのではないかと思いましたが、ちょっと見当たりませんでした。 何か方法はないでしょうか? よろしくお願いします。

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題はたとえばKAIIN_NOの項目が桁数20桁の場合に出力されるCSVが20桁を超えて50桁くらいで出力されたりします。項目桁数と同じではなくてもよいのですが、空白を出力したくないです。 なにかよい方法はありますでしょうか? ※Select文でTrimをかけても効果はありませんでした。 --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • 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 ご教授頂けましたら大変ありがたいです。 よろしくお願いいたします。

  • SQL ServerにCSVをインポート

    SQL Server Express 2012にCSVファイルのデータをインポートさせたいと思っています。 SQL Server のデータのうち、主キーはdate型、その他はbit型、nvarchar型です。 SQL Serverのテーブルのデータには、#2013-01-01#, #False#, "あいう"などというデータがあります。 CSVは、Event.csvというデータです。 インポートするにあたって、BULK INSERTを利用しようとしています。 上記のデータで下記のコードをSQL Server Managemant Studio Expressで実行するとエラーとなります。 FROM 'D:\Business\Data\Event.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); データを別の文字列にするべきなのか、#で日付やブール値を囲わない方がよいのか、あるいはカラム名の入ったCSVを用意するべきなのかなど、疑問が多いのですが、実際はどうあるべきなのでしょうか。 なお、上記のデータはもともとExcel のデータをVBAを使ってCSVファイルに出力したものなので、CSVの形式を別の状態のデータに変換することはできます。 もともとの目的は、ExcelのデータをSQL Serverのデータにインポートしたいだけです。 よろしくお願い致します。

  • sqlplusのspoolで空白行出現

    OS:Windows Server 2003 DB:Oracle10g(10.2.0) sqlplusでselect結果をcsvファイルにspoolする際に空白行が出力されて困っています。 以下のsqlを実行した場合、 ----- SET ECHO OFF SET FEEDBACK OFF SET HEADING OFF SET PAGESIZE 0 SET LINESIZE 2000 SET TERMOUT OFF SET TRIMSPOOL ON spool test.csv select '"'||col1||'","'||col2||'","'||col3||'"' from table; spool off ----- 改行を含むカラムを含む行の後に空白行が出力されます。 (2レコード目のcol3は"g"と"h"の間に改行コードがあるデータが格納されているが、何故か2レコード目と3レコード目の間に空白行が出力される) ----- "abc","def","ghi" "abc","def","g hi" "abc","def","ghi" ----- これはsqlplusの仕様でしょうか。 2行目と3行目の間の空白行を削除してspoolする方法はありますでしょうか。 なお、改行を含むカラムの改行を改行以外の文字に置換して出力した場合は、以下のように空白行が出現しません。 ----- "abc","def","ghi" "abc","def","gカイギョウhi" "abc","def","ghi" -----

  • 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使わない方法があれば、それでもいいのですが。。。。。

  • DBからタブ区切りのCSVデータを抽出する

    DBからCSVにしてデータを取り出そうと、ネットで検索して みようみまねでやってみました。(下記の場合カンマ区切りですが) タブ区切りで整列したデータを抽出したいのですが、特に、 (4)のように隣合う項目の間がかなり離れていて見えにくい状態で CSVファイルが作成されてしまいます。 (1)のように整列した形で、タブ区切りのCSVデータを抽出するには、 どのようにしたら宜しいのでしょうか? (2)、(3)は、試してみた実行ファイルです。 環境は、oracle10g windowsXPです。 (1)目的の結果の表示------------------------------- 653-5689 ZM05 田中太郎 YOKOHAMAS 4 4  9 097005・・・・・ 以下試してみたbatファイルとsqlで抽出 (2)batファイル---------------------------------- sqlplus ABCD/ABCD@oracle.host1.ser @abc.sql (3)sqlファイル----------------------------------- set echo off set heading off set termout off set pause off set pagesize 0 set trimspool on set feedback off set colsep "," set term off spool hoge.txt select * from T_JUTYU; spool off exit (4)結果--------------------------------- 653-5689 ,ZM05 田中太郎 ,YOKOHAMASI 4, 4, , ,9 ,097005 , 1 ,18 , , , , , 0 ,asahi asahi ,08-12-23,08-12-23, ------------------------------------------------まで結果

  • テーブルレイアウトの差異

    SQL*Plusでテーブルの構造を表示するDESCを使って、結果をSPOOLする際に csvファイルにしたいと思い SET HEADING OFF SET COLSEP "," SPOOL C:\WINDOWS\デスクトップ\スプール結果.txt DESC テーブル名 SPOOL OFF と実行してもカンマ区切りにならないのですが、DESCのときは出来ないのですか? Oracle for Windows 95のSQL*Plus Ver3.3.3.0.0を使用しています。 また、テーブルの構造の差異を見つける作業を行ないたいのですが、 効率の良い方法もしくはフリーソフトをご存知の方情報お願いします。 この質問がメインかな?

  • pl/sqlでcsvファイルダウンロード

    Oracleアプリケーションサーバーを利用しています。 Oracle8i。 PL/SQLから特定のテーブルのデータをCSVダウンロードさせるようにしたいのですが、ファイル名の特定ができません。 処理順序  declare    略  begin    owa_util.mime_header('text/csv', FALSE);    owa_util.http_header_close;    動的SQLを利用して一行ずつhtp出力    end 実行するとダウンロードを促すダイアログが表示されますが、そのとき表示されるファイル名がパッケージ名になっています。ソース中で任意にファイル名をつけたいのですがどうしたらよいでしょうか? または、ブラウザにデータを表示させたEXCELを表示させるといった方法でもよいです。(一行にカンマ区切りのデータが収まってしまうのはNG)   よろしくお願いいたします。