🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

11105閲覧

SQL Serverのデータをbcp出力する際に標題も出力したい

Umeda2019

総合スコア14

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

1グッド

0クリップ

投稿2020/12/25 05:47

Windows 10
SQL Server 2017

テーブルのデータをbcp出力します。データは出力できるのですが、標題(field name)を付けて出力する方法がわかりません。
どのようにすればよろしいでしょうか。

Minoc👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

CSV形式で出力するものとして回答します。
[手順]
①テーブルのfieldnameをcsvに出力
②改行のみ入ったcsvを出力
③テーブルの値をcsvに出力
④①~③で作ったcsvを合体させる
従業員テーブル
[具体的操作]
上記画像の従業員テーブルを扱う想定です。xxxはそれぞれ適切な文字列に代えてください。私はsqlserver認証を使っている環境で実行しました。windows認証等、環境が違う場合は読み替えてください。

①テーブルのfieldnameをcsvに出力

bcp "select column_name from xxx.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '従業員' order by ORDINAL_POSITION;" queryout c:\target\temp1.csv -c -r, -S xxx -U xxx -P xxx

■「select column_name from xxx.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '従業員' order by ORDINAL_POSITION;」で列の定義位置順にfieldnameを取得
■「-r,」で行ターミネータをカンマ区切りにする。

②改行のみ入ったcsvを出力

echo.>c:\target\temp2.csv

■ echoのあとに.を付けると改行が入る

③テーブルの値をcsvに出力

bcp xxx.xxx.従業員 out c:\target\temp3.csv -c -t, -r\n -S xxx -U xxx -P xxx

■「-t,」でフィールドターミネータをカンマ区切り、「-r\n」で行ターミネータを改行区切りにする

④ ①~③で作ったcsvを合体させる(output.csvというファイルを出力した)

copy /b c:\target\temp1.csv + c:\target\temp2.csv + c:\target\temp3.csv c:\target\output.csv

自分の環境ではうまくいきました。エレガントな方法ではないのですが、参考になれば幸いです。

(追記)
■xxx.INFORMATION_SCHEMA.COLUMNSのxxxには「データベース名」が入る。
下図参照を。
データベースとはSQLServerManagementStudioの左側「オブジェクトエクスプローラー」でみると
赤字で「データベース」と書いたところ。
SSMSのスクリーンショット
SQLServerが扱うデータベースは4層構造になっています。
最上部からインスタンス、データベース、スキーマ、テーブル。
上図画像だと、
インスタンスは赤字で隠した部分。
データベースは、AdventureWorks2019とlabo
スキーマはdbo
テーブルはaとAddresses。
(参考文献:おうちで学べるデータベースのきほん」

投稿2020/12/29 08:59

編集2021/01/09 14:45
magi201903

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Umeda2019

2021/01/05 04:27

詳細な回答ありがとうございます。 ご教授いただいた方法でエレガントに標題付きのファイルを出力させることができました。(ただ、「xxx.INFORMATION_SCHEMA.COLUMNS」の「xxx.」に何を入れてよいのかわからず、「INFORMATION_SCHEMA.COLUMNS」とだけ記載して実行しています。試しにフィールド名を一つ入れたり、テーブル名を入れてみましたが実行時にエラーとなりました。) なお、当方もSQL認証を使っています。 引数を何か入れれば標題が出力されるというものではないのですね。これまで使っていたデータベースのソフトが標題の出力をチェックボックスで選択するようになっていたものですから同様の方法がないか探していましたが見つかりませんでした。 この回答をいただく前に私が試したのは、少しゴリゴリ感が出てスマートではないのですが、ワークテーブルを作成し、1行目に標題を、2行目以降にデータを入れるものでした。この場合は、全てのフィールドを文字列とし、数字や日付のデータを文字列関数(STR)を使って変換しながらワークテーブルに出力する必要がありました。
magi201903

2021/01/09 14:49 編集

お役に立てれたら幸いです。簡単に列名を出す仕組みがあればいいですよね。。。 xxx.に何を入れたらよいかわからない件に関して。 結論だけ言うと、xxxには、データベース名を入れたらよいです。簡単な解説を回答に追記しました。
Umeda2019

2021/01/12 01:37

再度の回答ありがとうございます。 さっそくデータベース名を入れて実行してみたところ正しく動作しました。 これで実践でも使えそうです。
guest

0

目的も用途も調べた事も不明な点も何も説明がないので、ストレートに質問にだけ回答すると、そのような出力をするクエリを書いてqueryoutを指定すれば、少なくとも質問内容に書かれた要求は満たせます。

bcp ユーティリティ

質問文から読み取れる情報からはこの回答以上のものがありません。
なお条件を後出しされてもサポートするつもりはありません。

投稿2020/12/25 08:16

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問