← Back to Home

PowerShellでSQL Serverを操作する方法とその例

Views: 829

You can try the commands on our interactive shell.

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:

[1] https://learn.microsoft.com/ja-jp/sql/database-engine/configure-windows/start-stop-pause-resume-restart-sql-server-services?view=sql-server-ver16

[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

[9] https://learn.microsoft.com/ja-jp/sql/powershell/run-windows-powershell-from-sql-server-management-studio?view=sql-server-ver16

[10] https://learn.microsoft.com/ja-jp/powershell/module/sqlserver/invoke-sqlnotebook?view=sqlserver-ps

Try it Now!