Windows 10
SQL Server 2017
テーブルのデータをbcp出力します。データは出力できるのですが、標題(field name)を付けて出力する方法がわかりません。
どのようにすればよろしいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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の左側「オブジェクトエクスプローラー」でみると
赤字で「データベース」と書いたところ。
SQLServerが扱うデータベースは4層構造になっています。
最上部からインスタンス、データベース、スキーマ、テーブル。
上図画像だと、
インスタンスは赤字で隠した部分。
データベースは、AdventureWorks2019とlabo
スキーマはdbo
テーブルはaとAddresses。
(参考文献:おうちで学べるデータベースのきほん」
投稿2020/12/29 08:59
編集2021/01/09 14:45総合スコア29
0
目的も用途も調べた事も不明な点も何も説明がないので、ストレートに質問にだけ回答すると、そのような出力をするクエリを書いてqueryoutを指定すれば、少なくとも質問内容に書かれた要求は満たせます。
質問文から読み取れる情報からはこの回答以上のものがありません。
なお条件を後出しされてもサポートするつもりはありません。
投稿2020/12/25 08:16
総合スコア8947
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/05 04:27
2021/01/09 14:49 編集
2021/01/12 01:37