LoginSignup
3

More than 3 years have passed since last update.

posted at

updated at

Powershellで簡単にTransact-SQLを実行する術

この記事は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への接続のためのサーバ名指定をいれています。

Transact-SQL.ps1
#DB接続情報の設定
$Params = @{
    'Database' = 'master'
    'ServerInstance' = $serverName + '.database.windows.net'
    'Username' = $LoginUser
    'Password' = $plainPassword
    'Query' = ""
}

Queryには実際に実行したいSQLを投入します。

Transact-SQL.ps1
$Params.Query = "ALTER DATABASE $databaseName MODIFY NAME = $changedDbName"

で実行です。

Transact-SQL.ps1
invoke-sqlCmd @Params

おわりに

実行するSQLを配列に入れてしまって連続実行も可能ですし、接続句を一つにまとめられるのでキレイに書ける!よかった。
私はAzureSQLServerのDBリストアを自動化する過程でDB名を変更する必要があり利用しました。
@配列の使い方をこれで初めて学びました。。。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3