SQL Server Agentジョブでストアドプロシージャをスケジュール実行する方法
SQL Serverでストアドプロシージャをスケジュール実行する方法
- SQL Server Agent ジョブ
- Windows タスクスケジューラ
- サードパーティ製ツール
それぞれの方法にはメリットとデメリットがあり、使用する方法は状況によって異なります。
SQL Server Agent ジョブは、SQL Server に標準で搭載されている機能です。 ジョブの作成、スケジュールの設定、実行履歴の確認などがGUI で簡単に行えます。
メリット
- 使いやすい
- SQL Server との連携がスムーズ
- 実行履歴の確認などが簡単
- スケジュールの設定が複雑な場合がある
- 他のサーバーとの連携が難しい
設定手順
- SQL Server Management Studio (SSMS) を起動し、オブジェクトエクスプローラーで SQL Server Agent を展開します。
- ジョブ フォルダを右クリックし、新しいジョブ を選択します。
- ジョブの名前と説明を入力します。
- ステップ タブで 新しいステップ を選択します。
- ステップの種類 で Transact-SQL スクリプト を選択します。
- コマンド ボックスに、実行するストアドプロシージャの名前とパラメータを入力します。
- スケジュール タブで、ジョブの実行スケジュールを設定します。
- OK をクリックしてジョブを作成します。
Windows タスクスケジューラは、Windows に標準で搭載されている機能です。 SQL Server 以外のプログラムもスケジュール実行できます。
- 他のプログラムもスケジュール実行できる
- スケジュールの設定が柔軟
- スタートメニュー から Windows 管理ツール > タスクスケジューラ を選択します。
- アクション パネルで 新しいタスクの作成 を選択します。
- 全般 タブでタスクの名前と説明を入力します。
- アクション で プログラムの開始 を選択します。
- プログラム/スクリプト ボックスに、SQL Server のコマンドプロンプト (sqlcmd.exe) のパスを入力します。
SQL Server Agent ジョブやWindows タスクスケジューラよりも高度な機能を提供するサードパーティ製ツールがあります。
- 高度な機能が利用できる
- 費用がかかる場合がある
- 設定が複雑な場合がある
代表的なツール
- Redgate SQL Monitor
- Idera SQL Power Suite
- Quest Spotlight
USE AdventureWorks2019;
GO
CREATE PROCEDURE dbo.usp_GetEmployeesByDepartment
(
@DepartmentID INT
)
AS
BEGIN
SELECT *
FROM HumanResources.Employee
WHERE DepartmentID = @DepartmentID;
END;
GO
CREATE JOB dbo.Job_GetEmployeesByDepartment
BEGIN
EXEC dbo.usp_GetEmployeesByDepartment @DepartmentID = 1;
END;
GO
SCHEDULE JOB dbo.Job_GetEmployeesByDepartment
START AT '2024-04-07 17:38:00'
ON SCHEDULE 1;
GO
@echo off
sqlcmd -S localhost -d AdventureWorks2019 -U sa -P MyPassword -Q "EXEC dbo.usp_GetEmployeesByDepartment @DepartmentID = 1"
SQL Server Management Studio (SSMS) には、ストアドプロシージャを直接スケジュール実行できる機能があります。
- 設定が簡単
- スケジュールの設定が複雑な場合に対応できない
- SSMS でオブジェクトエクスプローラーからストアドプロシージャを選択します。
- 右クリックして スケジュールの実行 を選択します。
- スケジュールの設定画面で、実行スケジュールとパラメータを設定します。
- OK をクリックしてスケジュールを実行します。
PowerShell
PowerShell を使って、ストアドプロシージャをスケジュール実行できます。
- 他のタスクと組み合わせて実行できる
- PowerShell の知識が必要
$sql = "EXEC dbo.usp_GetEmployeesByDepartment @DepartmentID = 1"
Invoke-Sqlcmd -Query $sql -ServerInstance localhost -Database AdventureWorks2019 -Username sa -Password MyPassword
.NET Framework
- 柔軟な設定が可能
- .NET Framework の知識が必要
using System;
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
// 接続文字列
string connectionString = "Data Source=localhost;Initial Catalog=AdventureWorks2019;Integrated Security=True;";
// ストアドプロシージャの名前
string storedProcedureName = "dbo.usp_GetEmployeesByDepartment";
// パラメータ
SqlParameter parameter = new SqlParameter("@DepartmentID", 1);
// SqlConnection オブジェクトを作成
using (SqlConnection connection = new SqlConnection(connectionString))
{
// SqlCommand オブジェクトを作成
using (SqlCommand command = new SqlCommand(storedProcedureName, connection))
{
// コマンドタイプをストアドプロシージャに設定
command.CommandType = CommandType.StoredProcedure;
// パラメータを追加
command.Parameters.Add(parameter);
// コマンドを実行
command.ExecuteNonQuery();
}
}
}
}
上記以外にも、さまざまな方法があります。
- Azure Data Factory
- SSIS
sql-server t-sql