previous arrowprevious arrow
next arrownext arrow
Shadow
Slider
SQL

SQL BCPコマンド ストアド/SQLを使ってTSV・CSVを出力

SQLでインターフェースファイルを作るときに、ファイルを出力する必要があります。

Transact-SQLを組んでもいいのですが、結構面倒です。

SQLをバッチコマンドで実行する方法を備忘録として残しておきます。

ヘッダと明細の列数が異なるデータを抽出する記事を書いた時にも思っていました。

SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する IFファイルを作るときに、ヘッダー行、明細行、明細行...、ヘッダー行、明細行、明細行...のような作りのことがあります。 ...

デモンストレーションで動かした動画を載せておきます。

SQLserverからファイル出力する書き方

書き方はこんな感じです。

SQLServer認証の場合

bcp “SQL文 or ストアド名” queryout “出力パス” -c -t 区切り文字 -S サーバ名 or IP -U sa -P パスワード

Windows認証の場合

bcp “SQL文 or ストアド名” queryout “出力パス” -c -t 区切り文字 -S サーバ名 or IP –T

BCPで出力してみる

実行結果

以下のコマンドをコマンドプロンプトから実行しました。

サーバ名は自分のSQLSERVER名を入れて下さい

区切り文字は[tab]です。

実行した結果はこんな感じです。

(補足)ストアドの中身

dbo.GET_BUYING_HEAD_DETAILは以下のようなデータをSELECTするストアドです。

SQL ヘッダー行と明細(データ)行で項目数が異なるデータを抽出する IFファイルを作るときに、ヘッダー行、明細行、明細行...、ヘッダー行、明細行、明細行...のような作りのことがあります。 ...

SQLとバッチの応用

少し応用編です。

インターフェースファイルとして使うには以下がまだ問題です。

・コマンドを毎回打って実行しかできない。

・明細行に不要なタブや区切り文字がある

ということで、定期実行でも使える処理バッチにしてみました。

ファイル名は出力した日時にするようにしています。

実行結果

以下のように不要なタブ(区切り文字)も削除することができました。

ファイル名も出力した日時で出ています。

実行するタイミングはタスクスケジューラで定時実行にすればOKです。

 

関連している記事

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です