PowerShellでSQL Serverを操作する方法とその例
PowerShellは、SQL Serverの管理やデータ操作を自動化する強力なツールです。ここでは、PowerShellからSQL Serverを操作する主な方法と、その具体的な例を紹介します。
1. SQL Serverサービスの管理
PowerShellを使ってSQL Serverサービスの開始や停止などを行うことができます。
# SQL Server PowerShellプロンプトで実行
CD SQLSERVER:\SQL\
$Wmi = (get-item .).ManagedComputer
# 既定インスタンスの参照を取得
$DfltInstance = $Wmi.Services['MSSQLSERVER']
# サービスの状態を表示
$DfltInstance
# サービスの開始
$DfltInstance.Start()
$DfltInstance.Refresh()
# サービスの停止
$DfltInstance.Stop()
$DfltInstance.Refresh()
この方法で、SQL Serverのインスタンスやエージェントサービス、Browserサービスなども同様に管理できます[1]。
2. データベースやテーブルなどのオブジェクト操作(SMOの利用)
SQL Server Management Objects(SMO)を利用すると、PowerShellからデータベースやテーブルの作成・管理が可能です。
# SMOのDatabaseオブジェクトを生成
$db = New-Object Microsoft.SqlServer.Management.SMO.Database
$db.Parent = Get-Item ..
$db.Name = "sample"
$db.Create()
このようにして、データベースやテーブル、列などをファイルシステムのように操作できます[4]。
3. SQL Serverへの接続とデータ操作(ADO.NET/OleDb/ODBCの利用)
PowerShellからSQL Serverに接続し、SQL文を実行してデータの登録や取得、更新、削除ができます。
接続例(ADO.NET):
# 接続文字列の作成
$ConnectionString = "Server=サーバー名;Database=データベース名;User Id=ユーザー名;Password=パスワード;"
# コネクションオブジェクト生成
$conn = New-Object System.Data.SqlClient.SqlConnection($ConnectionString)
$conn.Open()
# SQLコマンドの作成と実行
$cmd = $conn.CreateCommand()
$cmd.CommandText = "INSERT INTO DUMMY_TABLE (INT_DATA, NVARCHAR_DATA) VALUES (@int, @str)"
$cmd.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@int", 1)))
$cmd.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@str", "日本語の入力")))
$cmd.ExecuteNonQuery()
$conn.Close()
この方法で、パラメータ付きクエリを使って安全にデータ操作ができます[2]。
接続例(ODBC):
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DSN=DSN名"
$conn.Open()
# データ取得
$sql="SELECT ShipName, Freight from Orders"
$da= New-Object System.Data.Odbc.OdbcDataAdapter($sql, $conn)
$dt= New-Object System.Data.DataTable
$da.Fill($dt)
$dt.Rows | foreach { Write-Host $_["ShipName"], $_["Freight"] }
$conn.Close()
ODBC経由でも同様にCRUD操作が可能です[5]。
4. PowerShellモジュールやコマンドレットの活用
SQL Server専用のPowerShellモジュール(例:SQLServerモジュール)を利用することで、Get-SqlAgentJobなどのコマンドレットでジョブ管理なども簡単に行えます[3]。
まとめ
PowerShellからSQL Serverを操作するには、 - サービス管理(WMI/Smo経由) - オブジェクト管理(SMO) - データ操作(ADO.NET/ODBC) - 専用モジュールやコマンドレットの活用 など複数の方法があり、用途に応じて使い分けることができます。 スクリプト化や自動化にも最適です。
Citations:
[2] https://qiita.com/miyamiya/items/de8af7d823b9b0986f0c
[3] https://learn.microsoft.com/ja-jp/powershell/module/sqlserver/get-sqlagentjob?view=sqlserver-ps
[4] https://news.mynavi.jp/techplus/article/20100519-ps_u/3
[5] https://www.cdata.com/jp/kb/tech/sql-odbc-powershell.rst
[6] https://learn.microsoft.com/ja-jp/powershell/sql-server/sql-server-powershell?view=sqlserver-ps
[7] https://www.climb.co.jp/blog_dbmoto/archives/3515
[8] https://qiita.com/opengl-8080/items/bb0f5e4f1c7ce045cc57
[10] https://learn.microsoft.com/ja-jp/powershell/module/sqlserver/invoke-sqlnotebook?view=sqlserver-ps