SQL Server 2008へSQLをたたいて結果を得る。
SQL Server2008をインストールすると、専用のスナップインがインストールされて利用できるようになる。このスナップインに含まれる Invoke-Sqlcmdを使うとSQLコマンドを直接たたくことできる。sqlcmdというコマンドもあるのだが、これはどうもデフォルトでは入らないらしく、その場合「Native Client」をインストールしろと言われる。
デフォルトではこれらのスナップインは使えないので、「Get-PsSnapin -Registered」で使えるかどうかの確認→「Pss-Pssnapin」という流れを踏む。詳細は[PowerShell]SQL PowerShellとスナップインを参照。こうすると Invoke-Sqlcmd が使えるようになる。
Invoke-Sqlcmdコマンドレットは、MySQLやPostgreSQLのコマンドラインツールとよく似ていて、ユーザー名、データベース名、(必要ならパスワード)、クエリを指定して投げてその結果を纏めて受け取ることができる。
$sql = "select count(*) from TABLE_SAMPLE"; $cnt = Invoke-Sqlcmd -Database hoge -U foo -P bar -Query $sql $count = $cnt.Item(0)
みたいなスクリプト*1を書くと、テーブルの行数をPowerShellから取得できる。
とはいえ、これだけだとうれしくない。実際にはテーブルからある程度のデータを拾いたいはず。そういうときにはこうする。
$sql = [String]::Format("select top 2 column1,column2,column3 from TABLE_SAMPLE");
$it = Invoke-Sqlcmd -Database hoge -U foo -P bar -Query $sql
foreach($ii in $it){
$format = [String]::Format("{1},{2},{3}", $ii, $ii.Item(0), $ii.Item(1), $ii.Item(2))
$format
}とすればOK。
もうちょい頭のよい書き方もあるんだろうけど、開発中のちょっとした確認にはこれで十分だった。