ナスです。
今日も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文を投げてその結果で処理分岐とかエラーハンドリングとかがやりやすいので、意外と役に立ちそうな気もする。

ちなみに、調べた中で一番役に立ったのはこのページ。スクリプト作る場合は参考になりそう。

I recently set out to change the recovery model of a SQL Server database with PowerShell. There seems to be lots of information available on how to accomplish this task with PowerShell through SMO …

mikefrobbins.com

元記事はこちら

PowerShellからSQL Serverを操作する方法 [cloudpack OSAKA blog]