5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-12-18

この記事は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名を変更する必要があり利用しました。
@配列の使い方をこれで初めて学びました。。。

5
3
0

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
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?