ストアドプロシージャを定期的に実行するようにMicrosoft SQL Serverを何らかの形でセットアップすることは可能ですか?
はい、MS SQL Serverでは、スケジュールされたジョブを作成できます。 SQL Management Studioで、サーバーに移動し、SQL Server Agentアイテムを展開し、最後にJobsフォルダーを展開して、スケジュールされたジョブを表示、編集、追加します。
MS SQL Server Express Editionが使用されている場合、SQL Serverエージェントは使用できません。すべてのエディションで以下が機能することがわかりました。
USE Master
GO
IF EXISTS( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[MyBackgroundTask]
GO
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- The interval between cleanup attempts
declare @timeToRun nvarchar(50)
set @timeToRun = '03:33:33'
while 1 = 1
begin
waitfor time @timeToRun
begin
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
end
end
END
GO
-- Run the procedure when the master database starts.
sp_procoption @ProcName = 'MyBackgroundTask',
@OptionName = 'startup',
@OptionValue = 'on'
GO
いくつかのメモ:
はい、SQL Serverエージェントを使用する場合。
Enterprise Managerを開き、目的のSQL Serverインスタンスの下の[管理]フォルダーに移動します。SQLServerエージェントが表示され、その下に[ジョブ]セクションが表示されます。
ここで、新しいジョブを作成できます。作成する必要があるステップのリストが表示されます。新しいステップを作成するとき、ストアドプロシージャを実際に実行するステップを指定できます(TSQLスクリプトを入力)。データベースを選択してから、コマンドセクションに次のように入力します。
exec MyStoredProcedure
これが概要です。さらにアドバイスが必要な場合は、ここに投稿してください。
[私は実際に私はこれに最初に入るかもしれないと思った、少年は私が間違っていた:)]
おそらくあなたが探している答えではありませんが、単純に Windows Server Task Scheduler を使用する方が便利だと思います
sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"
コマンドを直接使用できます
または、.bat
ファイルを作成することもできます。そのため、オンデマンドでタスクを2回クリックすることもできます。
これもこの方法でアプローチされました [〜#〜] here [〜#〜]
1つ追加します。私が今いる場所では、毎晩実行されるバッチジョブがたくさんありました。ただし、Windowsのスケジュールされたタスクでスケジュールされたクライアントアプリケーションを使用して、各ジョブを開始することに移行しています。これには、(少なくとも)3つの理由があります。
本当に短いVB.Netアプリです。興味のある方はコードを投稿できます。
SQL Server Service Brokerを使用して、カスタムメイドのメカニズムを作成できます。
アイデア(簡略化):
会話を開始するストアドプロシージャ/トリガーを記述する( BEGIN DIALOG )as loopback(FROM my_service TO my_service)-get conversation handler
DECLARE @dialog UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @dialog
FROM SERVICE [name]
TO SERVICE 'name'
...;
会話タイマーを開始します
DECLARE @time INT;
BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;
指定した秒数が経過すると、メッセージがサービスに送信されます。関連するキューでキューに入れられます。
CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF
, ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name>
, MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo')
, POISON_MESSAGE_HANDLING (STATUS = ON)
プロシージャは、特定のコードと再起動可能なタイマーを実行して再度起動します。
MichałGołośによって記述された完全に完成したソリューション(T-SQL)を見つけることができますタスクスケジューラ
ブログのキーポイント:
長所:
提案された区別:
SQL Serverエージェント(メンテナンス):
タスクスケジューラ(ビジネスプロセス):
設定方法:
[tsks].[tsksx_task_scheduler]
新しいタスクを追加します(列名は自己記述的で、サンプルタスクが含まれています)警告:ブログはポーランド語で書かれていますが、関連するソースコードは英語であり、簡単にフォローできます。
警告2:使用する前に、非本番環境でテストしたことを確認してください。
Management Studioを使用して、ジョブ(SQL Serverエージェントなし)を作成できます。1つのジョブには、T-SQLスクリプトからSSISパッケージまでの複数のステップを含めることができます
Jebはもっと速かった;)
SQL Serverエージェントを使用してスケジュールされたジョブ を確認する必要があります。