2009-07-08 7 views
1

私は、メンバーシップフォームを使用してライブラリ管理アプリケーションを作成しています。ステータス列を自動的に更新する

会員の種類は次のとおりです。

  1. 半期
  2. 毎年
  3. (15分間)パトロン
  4. 終身会員

今私は、SQL Serverのテーブルを設計しました2008年:

  1. MEMBERID
  2. 名前
  3. 参加日
  4. 有効期限
  5. ステータス

ステータスが期限切れの会員のためにメンバーのためMEのいずれかで構成されています。

ここで私はこのタスクを自動的に実行します。

たとえば、メンバーシップの有効期限が昨日だった場合、ステータスは自動的にEに変更されます。

どうすればいいですか?

+0

余分な感嘆符は必要ありません。人々はあなたを助けるためにこれらの質問を読んでいます:) – Jared

+0

あまり曖昧でないようにあなたの質問のタイトルを更新できますか? – Jared

答えて

2

有効期限はNULLで、生命メンバーのメンバーシップになります。その後、create a SQL Server Agent jobは、次のステートメントをキックオフし、実行するすべての15分(または5)は:

UPDATE 
    Membership 
SET 
    Status = 'E' 
WHERE 
    Status = 'M' AND ExpirationDate < getdate() 
    AND ExpirationDate IS NOT NULL 
-1

あなたはcreate a SQL Jobscheduleそれがステータスフラグを更新するために毎晩を実行することができます。ここでは、あなたがそれを始めるためにoverviewです。

コメント:データベースをこの要件を持つ独立したデータソースとして扱っているかどうかはわかりません。このステータスフラグを更新するのは、ビジネスケースのように見えます。有効期限を後で更新するとどうなりますか?また、そのステータスフラグを更新する必要があります。代わりに、アプリケーションで有効期限を解釈する必要があります。

おかげで、 -tom

+0

ご返信ありがとうございます。 実際には、SQL Serverエージェントをインストールしていません。 SQL ServerエージェントがFreeWareとして利用可能なリンクを教えていただけますか? 私を助けてください! – sheetal

1

どのように計算列を使用してはどうですか?

テーブルデザイナーの内部で、ステータス列を選択し、列のプロパティに移動し、ノード "計算列の指定"を選択します。そこに数式を入力してください:

CASE WHEN ExpirationDate IS NOT NULL AND ExpirationDate < GETDATE() THEN 'E' ELSE 'M' END 

これについての唯一の否定的なことは、索引付けできないことです。

+0

アクティブなメンバーを迅速に取得するためにこれをインデックスに追加したいと思うでしょうか?また、新しい問合せが呼び出されるたびにcalcがすべての行に対して実行されるため、表が大きくなるとパフォーマンスが低下する可能性があります。 – Eric

+0

選択性が非常に低いため、この列には索引は使用できません。 – RedFilter

0

レコードをオブジェクトにロードする場合、オブジェクトのプロパティを使用して「メンバー」/「期限切れ」を表示してみませんか?

この種の自動操作は、永続データストアにはあまり適していません。 Grecoが実際に必要な場合には計算結果の列を使用できますが、パフォーマンスの問題に発展する可能性があることを正しく指摘しています。

関連する問題