masalibの日記

システム開発、運用と猫の写真ブログです

SQLserverのDBの各テーブルのデータをCSVに落とす

同じだと思っていた各サーバーのデータが
微妙にちがう事が起きた・・・差分確認をするためにデータを出力することにした

SQLServerManagementStudioでCSVのエクスポートの機能があるが
1テーブルしか選択できないクソ仕様だった
またGUIの出力はミスがありそうで怖いwww


ぐぐって見ると一番最初にでてきたのが
qiita.com
ストアドで出力

できるみたいなのですが
実際に動かすと

SQLState = 28000, NativeError = 18456
Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]ユーザー 'XXX' はログインできませんでした。

エラーでした、調べてるのがめんどくさいのbcpコマンドで対応しました
昔からSQLServerのデータのインポートとエクスポートはbcpコマンドだった
いつになったら進化するのやら
https://ameblo.jp/archive-redo-blog/entry-10035185507.html


bcpコマンドの例

bcp db1.dbo.TABLE1 out test.txt -c -Usa -Psa -SSERVER1

  -c:SJIS出力
  -U:ログイン名
  -P:パスワード
  -S:SQLServerインスタンス名

該当のDBのすべてのテーブルを出力する
bcpコマンドを作るストアドを作りました

DECLARE @ServerName as varchar(256)
DECLARE @User as varchar(256)
DECLARE @Pass as varchar(256)
DECLARE @DBName as varchar(256)
DECLARE @OUTPass as varchar(256)

--接続情報・出力先--
set @ServerName = 'NNN.NNN.NNN.NNN'        --サーバ名 or IP
set @User = 'sa'              --ユーザ名
set @Pass = 'password'              --パスワード
set @DBName = 'dbname'        --DB名
set @OUTPass = 'E:\data\'       --出力パス

--use @DBName 手動で切り替える

SELECT 'bcp '+ @DBName + '.dbo.' + t.name + ' out ' + @OUTPass + t.name + '.txt -c -U' + @User + ' -P' + @Pass + ' -S' + @ServerName
FROM sys.tables t 

今日のつぶやき

自分の部署に21歳の女性がはいってきた16歳も離れている・・・
華やかな未来があるように見えてしまう
眩しいwww
あああ・・・老兵は去るべきなのね

今日のニャンコ



嫁が寝る前に甘えてくるきなこちゃん