tblClient
クライアントの生年月日をdatetime型のフィールドに格納したテーブルがありますDOB
。
ここでの目標は、クライアントが 65 歳 (生年月日で計算する必要があります) に達したときに、別のテーブルに新しいレコードを挿入する必要があることです。
ただし、データベースのトランザクション (INSERT、UPDATE、DELETE) によってクライアントの年齢は変わらないため、トリガーは論外です。
そのような変化を監視するには何が良いでしょうか?
tblClient
クライアントの生年月日をdatetime型のフィールドに格納したテーブルがありますDOB
。
ここでの目標は、クライアントが 65 歳 (生年月日で計算する必要があります) に達したときに、別のテーブルに新しいレコードを挿入する必要があることです。
ただし、データベースのトランザクション (INSERT、UPDATE、DELETE) によってクライアントの年齢は変わらないため、トリガーは論外です。
そのような変化を監視するには何が良いでしょうか?
ストアド プロシージャを定期的に実行する SQL Server エージェント ジョブは、可能な限り SQL Server に自己完結型にしてください。
T-SQL を使用してこの計算を実行する毎日または毎時間実行される SQL エージェント ジョブを作成し、誰かが 65 に達した場合に挿入を実行します。
age65 date という新しいフィールドはどうですか。レコードの挿入時に一度計算すると、このフィールドで心ゆくまでクエリを実行できます。これを行う必要があるのはトリガーです (更新を考慮すると、DOB フィールドではまれですが、入力ミスの場合に発生する可能性があります)。
次に、毎日のジョブを実行して、前回ジョブが正常に実行されてから 65 歳になった人をキャッチします。ある日ジョブが失敗した場合に、その日付の人が次の実行でピックアップされるように、必ずこれを処理してください。
私がこれを提案する理由は、データベース内のすべての人の年齢を毎日計算することは、実際には 1 回しか実行する必要がない計算に対してリソースの浪費になるからです。100 人の場合は大したことではありませんが、100 万人の場合は大きな問題になります。100 万件のレコードに対してこの種の計算を行い、必要な 3 件を特定するのは骨の折れる作業です。データ入力で一度やれば、それほど悪くはありません。
チェックするストアド プロシージャで SSIS を使用する夜間のジョブについてはどうでしょうか。それらが 65 である場合、テーブルに新しい行が入力されます。
これには、SQL Server Management Studio を使用して、データベース内に SQL Server エージェント ジョブを作成できます。
http://www.databasedesign-resource.com/sql-server-jobs.html
毎日の仕事を、EXEC BirthdayProcessingProcedure
または名前を付けたいものに設定します。
データベースが稼働している限り、JOB は (データベース内で) 設定したスケジュールに従って実行されます。
別のアプローチを提案します。DOB が更新 (または追加) されるたびに、最初の人が 65 歳になるまでの期間を計算する何かを実行します。次に、その時点で実行するジョブを (再) スケジュールします。
また、65 歳に達した瞬間にその行を挿入する必要があるとは思えないので、今日の新しい 65 歳を計算する 1 日 1 回の手順で十分に思えるでしょうか?
ストアド プロシージャを必要な回数だけ実行し、必要な行を更新する、スケジュールされたタスクまたは SQL Server メンテナンス プラン。