sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

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

ナスです。
今日もWindowsなネタです。

PowerShellSQL 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