この記事はPowerShellアドベントカレンダー2019に参加しています。
はじめに
Azure SQLDatabaseの処理自動化の過程でPowershellからSQLを実行する必要があったので実行しやすい形にまとめました。よかったら使ってください。
隙間が空いていたので遅ればせながらPowershellのAdventCalender2019の9日目に参加してみました!
参考文献は以下です。
MS:Invoke-Sqlcmd コマンドレット
MS:PowerShell を使用したエラスティック ジョブ エージェントの作成
1.必要なモジュール
Transact-SQLを実行する上でメインで使うコマンドは「Invoke-Sqlcmd」ですが、利用するには「SqlServer」モジュールが必要になりますので、先にインストールしておいてください。
2.実行形式
Invoke-Sqlcmdコマンドは実行時にサーバ名等の接続情報をオプションとして指定する必要があるので、先に接続情報を連想配列にして格納します。インデックス名はInvoke-Sqlcmdコマンドのオプション名と一致させる必要がありますので、オプションを追加したい場合はご注意ください。 また、パスワードは暗号化せず平文のまま格納する必要があります。
ServerInstanceにはDBサーバ名を指定する必要がありますが、ここではAzureDBへの接続のためのサーバ名指定をいれています。
#DB接続情報の設定
$Params = @{
'Database' = 'master'
'ServerInstance' = $serverName + '.database.windows.net'
'Username' = $LoginUser
'Password' = $plainPassword
'Query' = ""
}
Queryには実際に実行したいSQLを投入します。
$Params.Query = "ALTER DATABASE $databaseName MODIFY NAME = $changedDbName"
で実行です。
invoke-sqlCmd @Params
おわりに
実行するSQLを配列に入れてしまって連続実行も可能ですし、接続句を一つにまとめられるのでキレイに書ける!よかった。
私はAzureSQLServerのDBリストアを自動化する過程でDB名を変更する必要があり利用しました。
@配列の使い方をこれで初めて学びました。。。