人生中盤から色々学ぶ(ブ)ログ -13ページ目

人生中盤から色々学ぶ(ブ)ログ

IT、経済、英語、その他今必要だなと思う事を学びつつ、自分用の記録ついでにブログ化。
あん時やっときゃ良かった、をそろそろ終わりにしたい!

bcp こういうものです。

bulk copy program ユーティリティ (bcp) は、Microsoft SQL Server のインスタンスと、ユーザー指定の形式のデータ ファイルとの間でデータの一括コピーを行います。 bcp ユーティリティを使うと、多数の新規行を SQL Server テーブルにインポートしたり、データをテーブルからデータ ファイルにエクスポートしたりできます。 

このコンポーネントには、Windows インストーラー 4.5 と Microsoft ODBC Driver for SQL Server 17 の両方が必要です。

 

 

データのバックアップ、本番環境からテスト環境へのデータコピー、資料として、その他いろいろで使っています。

作業によってはもっといいやり方もあるのですが、テーブル単位に処理する時はお手軽かなと思ってます。

 

 

 

■基本的なコマンドパターン

引数には対象テーブルと接続情報。

outの指定なら指定ファイルへエクスポート、inなら指定ファイルからのインポートです。

-cで文字形式を指定します。-Cで文字コードを指定。

bcp DB名.スキーマ名.テーブル名 out ファイル名 -c -S サーバー名 -U ユーザー名 -P パスワード
bcp DB名.スキーマ名.テーブル名 in   ファイル名 -c -S サーバー名 -U ユーザー名 -P パスワード

 

特に難しい事はなく、あとはテーブル名の分コマンドをどんどん書いていくだけです。

 

 

 

 

■普段使い

テーブル名以外は共通になるパターンが多いと思いますので、

sys.tablesからテーブルの一覧を取得しつつリテラルを足してbcpコマンドを生成する、

という事をよくやります。

 

 

あるいは、テーブル管理一覧をExcelとかに落として、関数で文字を足すなど。

ExpとImpのコマンドを隣列に生成しておけば、抜け漏れ予防に役立つかも知れません。

 

 

先日あるプロジェクトからの依頼でデータ抽出した際には、

テーブルリストを読んでループでbcpを回すバッチを作りました。

(なかなかPowerShellに手が出ません・・・)

 

 

 

 

■入出力形式について

個人的には-n指定でデータのネイティブ (データベース) データ型を使用するのが、

容量/処理速度ともにベターなのかなと考えています。

 

 

というのもOracleでSQLloader使った昔の経験では圧倒的な速度差があったからなのですが。

 

SQLserverではエクスポートは試せたものの、本番相当な感じのデータではインポートが試せておらず。

パフォーマンスの程が余り体感出来ておりません。

 

 

横目で伺ってるプロジェクトでも、システム移行時にデータ変換が必要との事で文字で読める形式を求められていて。

新環境にDB作っていったん丸ごと放り込めば・・・と思うのですが、ディスク容量には限りがありますしね。

 

という訳で、
 

 

 

こちらのブログで紹介されていた、VisualBatを使ってみました。

 

 

ヤバい程バッチファイルのデバッグが楽になりました・・・

 

 

VSCodeで出来ないかな?と思ったんですが、コンソール内で実行できる程度で、

デバッグが楽になるという程のインパクトはありませんでした。。。

 

 

 

1.あちこちにechoとかpauseを埋める必要がない

一般的なIDE同様、ステップ実行が可能です。

正直もうこれだけでも十分に便利!!

 

 

2.変数値の変化を追いかけやすい

1と重複してますが、右側に変数値表示エリアがあり、逐次状況が表示されます。

リターンコードが上手く取れなくて悩んでた時、これのおかげで遅延変数展開が必要な事に気付きました。

 

 

3.インストールが不要

exeだけで動くアプリです。起動してバッチをドロップするだけでOK。

ややこしい社内ルールでのインストール申請も要らないのが助かりました。

 

 

4.定型パターンを登録できる

定型文をいくつかパターンとして登録出来ます。

ついついシンタックスを忘れてしまうもの(for文の派生形とか)なんかもヘルプ見なくてすみますね。

 

 

 

バッチ内のラベルをCALLしてサブルーチンのような使い方をしたり、

ストレートにコードを上から逐次実行しないバッチを書いてたので、デバッグ非常に捗りました。

 

VisualBat、万歳!!

 

 

Q.JP1のことなんですけど、AJS-Viewから退避したデータが保存されるフォルダが無いみたいなんですけど…

A.C:¥ProgramData ですね。非表示なってるんじゃないですか。アドレスバーに直打ちしてみてください。

(JP1関係ないのでは?)

 

Q.うちのFTPサーバー(Windows)ってどうなってるんですか?

A.接続元部門ごとにOSユーザとフォルダ分けて自分とこだけ見えるようになってます。

(ところでそれあなたのFTPサーバーなんですけど。。。)

 

Q.なんかプログラムでエラー出てるんですけどサーバーなんかしました?!

A.サーバーはいつもサービス提供してますので何もしてなかったら困りますが。

(プログラムでエラー出てるんでプログラムから調べませんか?)
 

Q.(エクスプローラでC:¥users\Administrator\デスクトップと辿れば良いですよ、からの)usersないんですけど…

A.まずCドライブ開けてみて下さい

(ネタですよね?そうだと言って。。。)

 

Q.お昼休みですけど今ちょっといいですか?〇〇の話なんですけどry

A.・・・・

(ちょっと良くないと回答する暇もない)

 

Q.JP1/IMの構築に必要な資料探してるんです…ベンダさんはこれですって言ってるんですけど分かります?

A.この紙JP1/NNMって書いてるんですけど、どの製品について答えたらいいか分かりません。

(こまかーく言えばNNMからIMに通知上げてるから無関係とも言えないケド)

 

Q.腕細いですね

A.運動とか全然してこなかった引き籠りなんです…

(いま作業の説明してる最中なんですけど??聞いてます!?!?)

 

Q.要するに〇〇だから□□は△になるって言う意味でしょ?

A.そうなる事で何が起きて結果どう状態になるから何をしないといけないか、は理解出来てますか?

(質問に質問で返してしまってすみません)

 

Q.ちょっと教えて欲しいんですけど、ここ手順の通りに表示されないんですけどなんでですか?

A.多分ですけど、手順通りやってないからだと思います。作業チェックリストにチェック入ってないところありますよ。

(何で手順書を途中から読んだり、まだやってない箇所を飛ばしたりするの???)

 

Q.明日休暇取られるんだったら、休み明け用の報告資料のメンテ終わらせといて下さいって言いましたよね?

A.忘れてましたwww

(笑いごとちゃうぞ)

 

 

 

 

こういう課題もITで解決出来ればいいのにな。