2017-05-02 5 views
1

私は数百ものレコードを持っていますが、すべてが期限切れのdatetimeカラムを持っています。このような何か:時間に応じてデータベーステーブルを絶えず更新するには?

Name   Expires    Status 
-----------+---------------------+--------+ 
Apple1  2017-05-05 10:10:15 Live 
Apple2  2017-06-01 18:15:03 Live 
Apple3  2017-01-01 23:59:59 Dead 
Apple4  2017-01-30 23:00:01 Draft 
Apple5  2017-01-30 23:00:01 Queued 

私は有効期限の日時が経過した後にLiveある任意のレコードのステータスを変更したいです。

これまでのところ、私はこれらの可能な解決策について考えている:

  1. 毎秒は、すべてのページ要求にアプリケーションサーバー(ColdFusionの2016)を使用して、それを実行し、いくつかの更新スクリプトを実行するために、SQL Serverジョブを設定します。したがって、ページが要求されるたびに、アプリケーションのonRequestStart()メソッドでこの更新スクリプトが実行されます。

どちらも「Web 1.0」と思われ、おそらく非常に高価です。私は、正しい時間が到着するとすぐにスケジュールされた投稿を公開するときにFacebookが行うことをしようとしていると思いますが、効率的にそれを行うにはうまくいかないでしょう。

これを達成するにはどのような方法が良いとお考えですか?

+6

なぜ更新しますか? sysdatetimeと比較してdatetimeをチェックしてください(同期しているか、実際のdtが気にかかっているものに基づいていると仮定します)。そして、常にテーブルを更新するのではなく、論理的にステータスを作ります。 Expires dtを取得するためにテーブルをクエリする必要があるでしょう...この時点では、有効期限が切れているかどうかを知っていますので、いくつかのロジックを読み込み/使用する列を更新する必要はありません。論理としてのdt自体。 – scsimon

+0

@scsimon時には、人々は手動でレコードを早期に期限切れにすることがあるためです。したがって、レコードに期限を設定するオプションがアプリケーションにあります。したがって、レコードが生存しているか死んでいるかを判断する方法として日付比較を行うだけでは機能しません。 –

+0

それは問題ありませんが、それは単なるIFチェックです。 – scsimon

答えて

4

は私が

SELECT 
    [Name] 
    ,[Expires] 
    ,CASE 
     WHEN GETUTCDATE() > [Expires] THEN 'Dead' 
     ELSE [Status] 
     END AS [view_Status] 
FROM Table 

の線に沿ってビューを使用するか、同じことを行い、ステータス列の計算列を使用するのいずれか。いずれにしても、有効期限が切れていると「死んだ」と表示され、それがなければステータス列を取得します。

関連する問題