12

私はユーザーテーブルを扱っており、「試用期間の終了日」を設定したいと考えています。基本的に、各新規ユーザーは、試用期間の一環として、参加してから丸 2 か月あります。ユーザー テーブルの列に式を入れることができることはわかりましたが、代わりにこれを更新するスクリプトが必要なのか、それとも計算列を使用するのにこれが許容できる時間なのか疑問に思っています。私はさまざまなことのためにこのテーブルにアクセスし、パフォーマンス マイルストーンの達成に基づいてユーザーの行を時々更新します。申請日は決して変更/更新されません。

私の質問は次のとおりです。この状況で計算列を使用することは良い方法ですか、それともその行を更新するたびに再計算しますか (App Date を更新するつもりはありません)。将来行を更新するときにオーバーヘッドを増やしたくありません。

試用期間終了日の列定義で使用している数式:

(dateadd(day,(-1),dateadd(month,(3),dateadd(day,(1)-datepart(day,[APP_DT]),[APP_DT]))))
4

3 に答える 3

15

この日付は、一度設定すると変更される可能性がほとんどないため、計算列の候補としてはおそらく適切ではありません。

結局のところ、そのテーブルに行を挿入すると、その「試用期間の終了」日をその場で簡単に計算でき (たとえば、トリガーで)、一度設定すると、その日付は変更されません。

したがって、間違いなくこの方法で実行できますが、一度だけ計算してその日付を保存するAFTER INSERTトリガー (または操作のストアド プロシージャ) を使用することをお勧めします。INSERT

また、念のために言っておきますが、数式だけを含む計算列は、アクセスするたびに計算されます。その点に注意してください。つまり、PERSISTEDキーワードを指定しない限り、その場合、結果は行内の他のデータと一緒に保存されます。これは、ここでの使用に適しています。これも、一度計算された値は変更されないためです。二度と。

于 2013-04-05T14:46:57.410 に答える
0

データを挿入するときのオーバーヘッドはありません。列を読み取るときにのみ、この列の値が計算されます。したがって、あなたのアプローチは正しいと思います。

于 2013-04-05T14:47:12.443 に答える