0

tblClientクライアントの生年月日をdatetime型のフィールドに格納したテーブルがありますDOB

ここでの目標は、クライアントが 65 歳 (生年月日で計算する必要があります) に達したときに、別のテーブルに新しいレコードを挿入する必要があることです。

ただし、データベースのトランザクション (INSERT、UPDATE、DELETE) によってクライアントの年齢は変わらないため、トリガーは論外です。

そのような変化を監視するには何が良いでしょうか?

4

7 に答える 7

2

ストアド プロシージャを定期的に実行する SQL Server エージェント ジョブは、可能な限り SQL Server に自己完結型にしてください。

于 2010-03-03T14:49:46.833 に答える
2

T-SQL を使用してこの計算を実行する毎日または毎時間実行される SQL エージェント ジョブを作成し、誰かが 65 に達した場合に挿入を実行します。

于 2010-03-03T14:48:00.710 に答える
1

age65 date という新しいフィールドはどうですか。レコードの挿入時に一度計算すると、このフィールドで心ゆくまでクエリを実行できます。これを行う必要があるのはトリガーです (更新を考慮すると、DOB フィールドではまれですが、入力ミスの場合に発生する可能性があります)。

次に、毎日のジョブを実行して、前回ジョブが正常に実行されてから 65 歳になった人をキャッチします。ある日ジョブが失敗した場合に、その日付の人が次の実行でピックアップされるように、必ずこれを処理してください。

私がこれを提案する理由は、データベース内のすべての人の年齢を毎日計算することは、実際には 1 回しか実行する必要がない計算に対してリソースの浪費になるからです。100 人の場合は大したことではありませんが、100 万人の場合は大きな問題になります。100 万件のレコードに対してこの種の計算を行い、必要な 3 件を特定するのは骨の折れる作業です。データ入力で一度やれば、それほど悪くはありません。

于 2010-03-03T15:39:31.933 に答える
1

チェックするストアド プロシージャで SSIS を使用する夜間のジョブについてはどうでしょうか。それらが 65 である場合、テーブルに新しい行が入力されます。

于 2010-03-03T14:48:10.277 に答える
1

これには、SQL Server Management Studio を使用して、データベース内に SQL Server エージェント ジョブを作成できます。

http://www.databasedesign-resource.com/sql-server-jobs.html

毎日の仕事を、EXEC BirthdayProcessingProcedureまたは名前を付けたいものに設定します。

データベースが稼働している限り、JOB は (データベース内で) 設定したスケジュールに従って実行されます。

于 2010-03-03T14:50:49.483 に答える
1

別のアプローチを提案します。DOB が更新 (または追加) されるたびに、最初の人が 65 歳になるまでの期間を計算する何かを実行します。次に、その時点で実行するジョブを (再) スケジュールします。

また、65 歳に達した瞬間にその行を挿入する必要があるとは思えないので、今日の新しい 65 歳を計算する 1 日 1 回の手順で十分に思えるでしょうか?

于 2010-03-03T14:51:00.203 に答える
1

ストアド プロシージャを必要な回数だけ実行し、必要な行を更新する、スケジュールされたタスクまたは SQL Server メンテナンス プラン。

于 2010-03-03T14:48:07.357 に答える