- PR -

SQL Server 2000での.csv出力について

1
投稿者投稿内容
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2006-05-08 19:37
いつもお世話になっています。

bcpをつかってビューで取得した結果をcsvファイルに出力したいのですが、その際に、先頭の行に列名を入れたいのです。一通り、ヘルプを見てみたのですが、うまくいかず困っています。
データベースはSQLServe2000です。

そもそも、そういったことは、bcpで可能なのでしょうか?isqlやosqlを使わないとできないものなのでしょうか?
kiyoharu
常連さん
会議室デビュー日: 2005/08/06
投稿数: 25
お住まい・勤務地: 神奈川県鎌倉市
投稿日時: 2006-05-08 22:33
おつかれさまです。
BCPに列名を表示するオプションはないようです。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1193377
SQLServe2000であればDTSを使えば、オプションで列名を表示して
csv出力することができますが、それでは駄目でしょうか。
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2006-05-09 09:16
返信ありがとうございます。

プログラムの動作のひとつとして行いたい処理なので、できればコマンドで実行したいと考えています。DTSもコマンドプロンプトから実行できるようですが、客先にDTSパッケージを作らなければならなかったり、セキュリティの関係で動作がうまくいかなかったりするのではないか、という心配があるので・・・

osqlで実行して、列名を先頭に表示することはできたのですが、(コマンドプロンプトの画面をそのまま吐き出しているからなのか)2列目に「--------」と横棒がいっぱい入ってしまって・・・これさえなくすことができれば解決なのですが・・・
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-05-09 09:42
思いつきで試してないですが。

BCPで queryout のオプションを使えばいけるかもしれません。
使用するクエリは次のようなイメージで・・・

select '列1','列2'
union all
select 列1,列2 from 表1
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2006-05-09 14:08
UNIONは思いつかなかったです!確かにそれでいけそうですね。
でも、列名が100以上あるので、べた書きはなかなか大変かも・・・

ストアドのsp_columnsを使っても、列名は行単位で出てくるので使えないんですよね・・・何か簡単に列名だけを取得できる方法があれば教えていただきたいのですが・・・
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2006-05-10 13:19
自己レスで申し訳ないのですが、UNIONって当然のことながら、上のSELECT文と下のSELECT文で、データ型が一緒じゃないと使えないんですよね・・・出力したい結果としては、decimal型が含まれていたり、CASE文が含まれていたりするため、エラーになってしまいました・・・

今考えているのは、(プロの中で).csvファイルが吐き出された後に、そいつを開いて2行目だけ削除して、また閉じる、というなんともダサい処理を行おうとしているのですが・・・もっとエレガントは方法があれば教えていただきたいですm(_ _)m
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-09-16 01:51
引用:

セルカーさんの書き込み (2006-05-10 13:19) より:
自己レスで申し訳ないのですが、UNIONって当然のことながら、上のSELECT文と下のSELECT文で、データ型が一緒じゃないと使えないんですよね・・・出力したい結果としては、decimal型が含まれていたり、CASE文が含まれていたりするため、エラーになってしまいました・・・


もう遅いでしょうけど、convertしたらどうだったのかなって思いました。
1

スキルアップ/キャリアアップ(JOB@IT)