2011年10月7日金曜日

◆SQLServer、テーブルの中身をCSVに落とす

色々と方法はあるのでしょうが、とりあえず「SQLServer Posershell」を使ってやってみた。

以前の説明で「SQL Server」用のPowershell環境ができていれば特に難しいことは何も無い。

001
002
003
004
005

dir SQLSERVER:\sql\localhost\sqlexpress\Databases\Northwind\tables |
  ?{$_.name -like "order*"} |
 
 
%{$name=$_.
name
   
invoke-sqlcmd -database Northwind -query "select * from $name" |
 
     
Export-Csv "d:\desktop\$name.csv" -NoTypeInformation}

テーブルに日本語が含まれる場合はEncoding指定も必要になる。

自PCでは特に問題は無かったのだが、幾つかのサーバーで試した所、うまくいかないケースがあった。

Invoke-Sqlcmd : サーバーへの接続を確立しているときにエラーが発生しました。SQL S
erver 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既
定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能
性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server へ
の接続を開けませんでした)

環境を比較しても有効なプロトコルとかに違いはなく、今ひとつ原因がはっきりしない。
あくまでも想像だが、認証にSQLServer認証を使用しているのが原因かもしれない。(invoke-sqlcmdでユーザーID/パスワードは指定を指定したりしても変わらない)

この場合でも、一旦カレントディレクトリをtablesのところまで変更してから実行したりすると上手く行った。

特に運用で使うわけでもなく回避策もあるので良しとする。

外部からの接続でもそうだったが、どうも認証関係がスムーズではない感じだ。

0 件のコメント:

コメントを投稿