深夜に7つのタイムゾーンで実行する必要がある仕事があります。Windows Server2008R2のSQL2008R2でこれを行う単一のスケジュールを作成する方法はありますか?これにより、処理するタイムゾーンがプロシージャに通知されますか?
3 に答える
SQL Serverが1つしかない場合は、7つの個別のスケジュールされた呼び出しを設定する必要があります。タイムゾーンごとに1つ、この特定のタイムゾーンの深夜に実行します。これがこれを行うための最良の方法です。
それはちょうど私に起こりました-あなたは(私が仮定したように)各タイムゾーンの深夜に実行したいということですか?つまり、7つの異なる時間、または現在のタイムゾーンの深夜に実行しますが、一度に7つの別々のタイムゾーンのデータを処理します(この場合、異なるタイムゾーン処理の違いは何ですか?
SQLServerエージェントはタイムゾーンに対応していません。以下を計算することにより、手順内のタイムゾーンを把握できます。
SELECT DATEDIFF(MINUTE, GETDATE(), GETUTCDATE());
したがって、1時間ごとに実行するようにスケジュールを設定し、手順内で、上記の結果が7つのタイムゾーンのいずれかになるかどうかを確認できます。そうでない場合は、戻ってください。
7つのタイムゾーンをテーブルに保存して、8番目のタイムゾーンを追加するときに手順を変更する必要がないようにすることができます。
また、将来サポートする可能性のあるタイムゾーンによっては、より細かく調整する必要がある場合もあります。UTCからn時間離れたラウンド数ではないものもあります。たとえば、ニューファンドランドは30分です。夏時間に応じて、UTCから2.5時間または3.5時間遅れます。
1時間ごとにストアドプロシージャを実行するようにジョブをスケジュールするだけです。また、ストアドプロシージャDATEPART(hh, GETUTCDATE())
で、UTCで必要なタイムゾーンの深夜の固定リストを確認します。たとえば、タイムゾーン+1を確認 DATEPART(hh, GETUTCDATE())=(24-1)
し、+2を確認します。DATEPART(hh, GETUTCDATE())=(24-2)