タスクのリストを保持するためのテーブルがあり、これらのタスクは特定の日時に処理する必要があります。トリッキーな部分は、これらのタスクが再帰的に実行されることです。実行時間は、5つの異なるパラメーターに基づいて計算する必要があります。
UDFを介した実行時間の計算は、単純な部分でした。
Function dbo.task_next_run(
@task_type varchar(10),
@task_schedule_day_of_week varchar(20),
@task_schedule_time varchar(20),
@task_period smallint,
@last_run datetime
)
Returns datetime
...
...
...
Return @next_run
私の最後のタスククエリはこれでした:
SELECT id,
task_name,
last_run
From tasks
Where dbo.task_next_run
(
task_type, @task_schedule_day_of_week,
@task_schedule_time, @task_period, @last_run
) < getdate() and
dbo.task_next_run
(
task_type, @task_schedule_day_of_week,
@task_schedule_time, @task_period, @last_run
) > last_run
私の問題は、where句で同じ関数を2回実行することです。where句のエイリアスとして計算値を使用するソリューションが必要です。