ナスです。
今日もWindowsなネタです。
PowerShellでSQL Serverに処理をさせたいという要件(こちらの希望)がありまして、いろいろ調べた結果をメモがてら書いていきます。
必要なPSモジュール
とりあえずSQLPSを入れます。
Import-Module SQLPS
get-itemでデータベースの主なプロパティが見れる
PS SQLSERVER:\> $db1 = get-item SQLSERVER:\SQL\localhost\DEFAULT\Databases\nasu PS SQLSERVER:\> $db1[0] Name Status Containment Type Recovery Model CompatLvl Collation Owner ---- ------ ---------------- -------------- --------- --------- ----- nasu Normal None Full 120 SQL_Latin1_General_CP1_CI_AS WIN-B8DK10O9I2N\Administrator
試しに復旧モデルを変更してみる
PS SQLSERVER:\> $db1[0].recoverymodel Full PS SQLSERVER:\> $db1[0].recoverymodel = "Simple" PS SQLSERVER:\> $db1[0].recoverymodel Simple PS SQLSERVER:>> $db1[0].recoverymodel = 1 PS SQLSERVER:\> $db1[0].recoverymodel Full PS SQLSERVER:\> $db1[0].recoverymodel = 2 PS SQLSERVER:\> $db1[0].recoverymodel BulkLogged PS SQLSERVER:\> $db1[0].recoverymodel = 3 PS SQLSERVER:\> $db1[0].recoverymodel Simple
SQL文を実行してみる
PS SQLSERVER:\> Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\nasu\ PS SQLSERVER:\SQL\localhost\DEFAULT\Databases\nasu> Invoke-Sqlcmd "select * from dbo.nasu999;" WARNING: Using provider context. Server = localhost, Database = nasu. c001 c002 ---- ---- aaa 1
なんかWARNINGでたけどまあいいや。
というわけで、これだけできるとPowerShellだけでも十分いろいろできそうです。とはいえ、今の仕事で使う以外では役に立ちそうもない…
でもSQL文を投げてその結果で処理分岐とかエラーハンドリングとかがやりやすいので、意外と役に立ちそうな気もする。
ちなみに、調べた中で一番役に立ったのはこのページ。スクリプト作る場合は参考になりそう。
mikefrobbins.com