PowerShellでSQL実行する方法
PowerShellからSQL Serverクエリを実行する方法の日本語解説
PowerShellは、Windowsのタスク自動化やシステム管理に用いられるスクリプト言語です。一方、SQL Serverは、リレーショナルデータベース管理システムです。これらのツールを連携させることで、PowerShellからSQL Serverのデータベースにアクセスし、クエリを実行することが可能です。
SQL Serverモジュールをインポートする
まず、PowerShellでSQL Serverモジュールをインポートします。これにより、SQL Serverの機能にアクセスできるようになります。
Import-Module SqlServer
SQL Serverインスタンスに接続する
次に、SQL Serverインスタンスに接続します。インスタンス名は、通常はコンピューター名またはインスタンス名です。
$serverName = "yourServerName"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Integrated Security=True")
$connection.Open()
SQLクエリを実行する
接続が確立されたら、SQLクエリを実行します。クエリは、SQL文として指定します。
$query = "SELECT * FROM YourTableName"
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$reader = $command.ExecuteReader()
結果を処理する
クエリの実行結果を処理します。結果を読み取り、表示したり、他の処理に利用したりすることができます。
while ($reader.Read()) {
Write-Host $reader.Item("ColumnName")
}
$reader.Close()
接続を閉じる
最後に、接続を閉じます。
$connection.Close()
例
以下は、SQL Serverの"Customers"テーブルからすべてのデータを抽出する例です。
Import-Module SqlServer
$serverName = "yourServerName"
$query = "SELECT * FROM Customers"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$reader = $command.ExecuteReader()
while ($reader.Read()) {
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("CompanyName")
Write-Host $reader.Item("ContactName")
}
$reader.Close()
$connection.Close()
この例では、"Customers"テーブルのデータを順番に読み取り、コンソールに表示しています。
注意
- セキュリティを考慮して、適切な認証方法を使用してください。
- 接続文字列は、SQL Serverインスタンスの接続情報に合わせて調整してください。
- SQLクエリは、SQL Serverの構文に従う必要があります。
例1: 基本的なクエリ実行
Import-Module SqlServer
$serverName = "yourServerName"
$databaseName = "yourDatabaseName"
$query = "SELECT * FROM Customers"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Database=$databaseName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$reader = $command.ExecuteReader()
while ($reader.Read()) {
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("CompanyName")
Write-Host $reader.Item("ContactName")
}
$reader.Close()
$connection.Close()
例2: パラメータ化されたクエリ
Import-Module SqlServer
$serverName = "yourServerName"
$databaseName = "yourDatabaseName"
$query = "SELECT * FROM Customers WHERE City = @City"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Database=$databaseName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$command.Parameters.AddWithValue("@City", "London")
$reader = $command.ExecuteReader()
while ($reader.Read()) {
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("CompanyName")
Write-Host $reader.Item("ContactName")
}
$reader.Close()
$connection.Close()
例3: ストアドプロシージャの実行
Import-Module SqlServer
$serverName = "yourServerName"
$databaseName = "yourDatabaseName"
$procedureName = "GetCustomersByCity"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Database=$databaseName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand($procedureName, $connection)
$command.CommandType = [System.Data.CommandType]::StoredProcedure
$command.Parameters.AddWithValue("@City", "London")
$reader = $command.ExecuteReader()
while ($reader.Read()) {
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("CompanyName")
Write-Host $reader.Item("ContactName")
}
$reader.Close()
$connection.Close()
例4: 複数の結果セットを処理
Import-Module SqlServer
$serverName = "yourServerName"
$databaseName = "yourDatabaseName"
$query = "SELECT * FROM Customers; SELECT * FROM Orders"
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Database=$databaseName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$reader = $command.ExecuteReader()
while ($reader.Read()) {
Write-Host "Customers:"
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("CompanyName")
Write-Host $reader.Item("ContactName")
}
$reader.NextResult()
while ($reader.Read()) {
Write-Host "Orders:"
Write-Host $reader.Item("OrderID")
Write-Host $reader.Item("CustomerID")
Write-Host $reader.Item("OrderDate")
}
$reader.Close()
$connection.Close()
Invoke-SqlCmdコマンドレット
Invoke-SqlCmdコマンドレットは、SQL Serverコマンドラインユーティリティ(sqlcmd)の機能をPowerShellから利用するためのコマンドレットです。
Invoke-SqlCmd -ServerInstance "yourServerName" -Database "yourDatabaseName" -Query "SELECT * FROM Customers"
ADO.NETのクラスを使用
ADO.NETは、.NET Frameworkのデータアクセス技術です。PowerShellからADO.NETのクラスを使用して、SQL Serverに接続し、クエリを実行することができます。
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=yourServerName;Database=yourDatabaseName;Integrated Security=True")
$connection.Open()
$command = New-Object System.Data.SqlClient.SqlCommand("SELECT * FROM Customers", $connection)
$reader = $command.ExecuteReader()
while ($reader.Read()) {
# 結果を処理する
}
$reader.Close()
$connection.Close()
PowerShellのパイプラインとSQL Serverのパイプラインを使用
PowerShellのパイプラインとSQL Serverのパイプラインを組み合わせて、クエリを実行することもできます。
$query = "SELECT * FROM Customers"
$results = Invoke-SqlCmd -ServerInstance "yourServerName" -Database "yourDatabaseName" -Query $query
$results | ForEach-Object {
# 結果を処理する
}
SQL Server Integration Services (SSIS)
SSISは、SQL Serverのデータ統合ツールです。SSISのパッケージを使用して、SQL Serverクエリを実行し、データの変換や移動を行うことができます。
PowerShellスクリプトをSQL Serverのストアドプロシージャとして実行
PowerShellスクリプトをSQL Serverのストアドプロシージャとして実行し、SQL Serverから直接スクリプトを実行することもできます。
powershell sql