PowerShellからSQL Serverストアドプロシージャを呼び出す方法

2024-04-06

SQL Server のストアドプロシージャを PowerShell から呼び出す方法

SQL Server のストアドプロシージャは、データベース操作をまとめたプログラムです。PowerShell は、Windows システム管理向けのスクリプティング言語です。PowerShell からストアドプロシージャを呼び出すことで、データベース操作を自動化できます。

方法

  1. 必要なモジュールのインストール

    Install-Module SqlServer
    
  2. 接続情報の準備

    以下の変数に、SQL Server への接続情報とストアドプロシージャの名前を格納します。

    $serverName = 'localhost'
    $databaseName = 'TestDB'
    $storedProcedureName = 'MyStoredProcedure'
    
  3. 接続の作成

    以下のコマンドを実行して、SQL Server への接続を作成します。

    $connection = New-Object Microsoft.SqlServer.Management.Smo.ServerConnection($serverName)
    
  4. データベースの選択

    以下のコマンドを実行して、接続するデータベースを選択します。

    $connection.Database = $databaseName
    
  5. ストアドプロシージャの作成

    以下のコマンドを実行して、ストアドプロシージャを実行します。

    $cmd = New-Object Microsoft.SqlServer.Management.Smo.SqlCommand($connection, $storedProcedureName)
    $cmd.ExecuteNonQuery()
    
  6. 接続のクローズ

    $connection.Dispose()
    

パラメータの受け渡し

ストアドプロシージャにパラメータを渡す場合は、$cmd.Parameters プロパティにパラメータオブジェクトを追加します。

$param1 = New-Object Microsoft.SqlServer.Management.Smo.SqlParameter('@param1', 'nvarchar(50)')
$param1.Value = 'Hello, world!'
$cmd.Parameters.Add($param1)

$cmd.ExecuteNonQuery()

結果の取得

ストアドプロシージャが結果セットを返す場合は、$cmd.ExecuteReader() メソッドを使用して結果を取得できます。

$reader = $cmd.ExecuteReader()

while ($reader.Read()) {
    $id = $reader['Id']
    $name = $reader['Name']

    Write-Host "Id: $id, Name: $name"
}

$reader.Close()

詳細は、以下のドキュメントを参照してください。




# モジュールのインストール
Install-Module SqlServer

# 接続情報の準備
$serverName = 'localhost'
$databaseName = 'Northwind'
$storedProcedureName = 'GetCustomers'

# 接続の作成
$connection = New-Object Microsoft.SqlServer.Management.Smo.ServerConnection($serverName)

# データベースの選択
$connection.Database = $databaseName

# ストアドプロシージャの作成
$cmd = New-Object Microsoft.SqlServer.Management.Smo.SqlCommand($connection, $storedProcedureName)

# 結果の取得
$reader = $cmd.ExecuteReader()

# 結果の出力
while ($reader.Read()) {
    $customerId = $reader['CustomerID']
    $companyName = $reader['CompanyName']

    Write-Host "CustomerID: $customerId, CompanyName: $companyName"
}

# 接続のクローズ
$connection.Dispose()

# 結果のクリーンアップ
$reader.Close()

このコードを実行すると、Customers テーブルのすべてのデータが表示されます。




SQL Server ストアドプロシージャを PowerShell から呼び出すその他の方法

Invoke-Sqlcmd コマンドレットは、SQL Server に対するクエリやコマンドを実行するためのコマンドレットです。このコマンドレットを使用して、ストアドプロシージャを呼び出すことができます。

Invoke-Sqlcmd -ServerInstance localhost -Database Northwind -Query "EXEC GetCustomers"

SMO オブジェクト

SQL Server Management Objects (SMO) は、PowerShell から SQL Server を管理するためのオブジェクトモデルです。SMO オブジェクトを使用して、ストアドプロシージャを呼び出すことができます。

# モジュールのインストール
Install-Module SqlServer

# 接続情報の準備
$serverName = 'localhost'
$databaseName = 'Northwind'
$storedProcedureName = 'GetCustomers'

# 接続の作成
$connection = New-Object Microsoft.SqlServer.Management.Smo.ServerConnection($serverName)

# データベースの選択
$connection.Database = $databaseName

# ストアドプロシージャの作成
$cmd = New-Object Microsoft.SqlServer.Management.Smo.SqlCommand($connection, $storedProcedureName)

# 結果の取得
$reader = $cmd.ExecuteReader()

# 結果の出力
while ($reader.Read()) {
    $customerId = $reader['CustomerID']
    $companyName = $reader['CompanyName']

    Write-Host "CustomerID: $customerId, CompanyName: $companyName"
}

# 接続のクローズ
$connection.Dispose()

# 結果のクリーンアップ
$reader.Close()

SqlConnection クラスは、.NET Framework から SQL Server に接続するためのクラスです。SqlConnection クラスを使用して、ストアドプロシージャを呼び出すことができます。

# モジュールのインストール
Install-Module SqlServer

# 接続情報の準備
$serverName = 'localhost'
$databaseName = 'Northwind'
$storedProcedureName = 'GetCustomers'

# 接続文字列の作成
$connectionString = "Data Source=$serverName;Initial Catalog=$databaseName;Integrated Security=True;"

# 接続の作成
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)

# コマンドの作成
$cmd = New-Object System.Data.SqlClient.SqlCommand($storedProcedureName, $connection)
$cmd.CommandType = System.Data.CommandType.StoredProcedure

# 結果の取得
$reader = $cmd.ExecuteReader()

# 結果の出力
while ($reader.Read()) {
    $customerId = $reader['CustomerID']
    $companyName = $reader['CompanyName']

    Write-Host "CustomerID: $customerId, CompanyName: $companyName"
}

# 接続のクローズ
$connection.Close()

# 結果のクリーンアップ
$reader.Close()

ODBC 接続を使用して、SQL Server に接続し、ストアドプロシージャを呼び出すことができます。

# モジュールのインストール
Install-Module SqlServer

# 接続情報の準備
$serverName = 'localhost'
$databaseName = 'Northwind'
$storedProcedureName = 'GetCustomers'

# データソース名の作成
$dataSourceName = "Driver={SQL Server};Server=$serverName;Database=$databaseName;Trusted_Connection=Yes;"

# 接続の作成
$connection = New-Object System.Data.Odbc.OdbcConnection($dataSourceName)

# コマンドの作成
$cmd = New-Object System.Data.Odbc.OdbcCommand($storedProcedureName, $connection)
$cmd.CommandType = System.Data.CommandType.StoredProcedure

# 結果の取得
$reader = $cmd.ExecuteReader()

# 結果の出力
while ($reader.Read()) {
    $customerId = $reader['CustomerID']
    $companyName = $reader['CompanyName']

    Write-Host "CustomerID: $customerId, CompanyName: $companyName"
}

# 接続のクローズ
$connection.Close()

# 結果のクリーンアップ
$reader.Close()

各方法の比較

方法メリットデメリット
Invoke-Sqlcmd コマンドレット簡単機能が限定されている
SMO オブジェクト柔軟性が高い複雑
SqlConnection クラス.NET Framework との互換性が高い

sql-server powershell


リモート接続、データリンク、オブジェクトエクスプローラー:T-SQLで別のSQLサーバーに接続するその他の方法

リンクサーバーを使用するリンクサーバーは、別のSQLサーバーへの接続を抽象化する仮想サーバーです。リンクサーバーを作成すると、そのサーバー上のデータベースに対して、ローカルサーバー上のデータベースと同じようにクエリを実行することができます。...


SQL Server 2017 以前で文字列をトリムする方法

LTRIM関数は、文字列の先頭から指定した文字を削除します。各関数の詳細削除文字は省略可能です。省略した場合、デフォルトでは空白文字(スペース、タブ、改行など)が削除されます。使用例以下の例では、LTRIM関数、RTRIM関数、TRIM関数をそれぞれ使用して、文字列の先頭と末尾から空白文字を削除しています。...


SQL Server 2005 でテーブル、ストアド プロシージャ、トリガー、制約、およびすべての依存関係を 1 つの SQL ステートメントでドロップする方法

このコードは、以下の手順を実行します。sp_MSforeachtable システムストアドプロシージャを使用して、すべてのユーザーテーブルをループ処理します。各テーブルに対して、DROP TABLE ステートメントを使用してテーブルをドロップします。...


SUBSTRING、REPLACE、PATINDEXを使いこなす!SQL Serverで文字列を自在に操る

本記事では、以下の3つの方法について解説します。SUBSTRING と LEN 関数REPLACE 関数PATINDEX と UPDATE 関数それぞれの方法について、具体的なコード例と詳細な説明を提供します。以下の環境を想定しています。SQL Server 2017以降...


データベース接続のタイムアウトを理解しよう! SQL Server接続における「接続タイムアウト」

SQL Server 接続文字列における 接続タイムアウト は、クライアントアプリケーションが SQL Server インスタンスに接続を試行する際に、待機する最大時間を秒単位で設定する値です。この時間内に接続が確立されなければ、接続タイムアウトエラーが発生します。...


SQL SQL SQL SQL Amazon で見る



PowerShellとSQL Serverの連携でできること:データ取得、操作、自動化まで

SQL Serverモジュールは、PowerShellからSQL Serverとやり取りするための公式モジュールです。このモジュールを使用すると、クエリの実行、データの取得、SQL Serverインスタンスの設定変更など、さまざまな操作を実行できます。