2016-07-29 9 views
0
CREATE TABLE Appointment 
(
    Id     INT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    Maker    INT NOT NULL, 
    Target    INT NOT NULL, 
    [From]    DateTime NOT NULL, 
    [To]    DateTime NOT NULL, 
    Note    NVARCHAR(128) NOT NULL, 
    Created    FLOAT NOT NULL, 
    LastModified  FLOAT, 
    LastModifiedNote NVARCHAR(128), 
    [Status]   TINYINT NOT NULL 

    FOREIGN KEY (Maker) REFERENCES Person(Id), 
    FOREIGN KEY (Target) REFERENCES Person(Id) 
) 

私のテーブルにいくつかの情報を説明させてください:この表は、人と人の間のアポイント情報です。 [From]は、予定が開始されるべき時であり、[To]は予定を終了すべき時刻である。現在の時刻から特定の時刻にSQLコマンドをトリガーする

私がやりたいすべてがある:

  • 予定が作成され、時間[To]をチェックし、時間の予定では、クエリが4に[Status]を変更するために実行され、終了する必要があります(期限切れ任命は、編集した時間[To]をチェックして、

上記の手順と同じことをしている)

  • 例えば

    9.am

    • 、私は [TO] との約束を作成したが午後5時ので、2016年7月29日午後5時です、クエリが

    • [状態]この予定のを変更するために実行する必要があります午前10時、私はこの予定を編集し、私は 2016年7月29日午後7時に[へ]変更、代わりに任命は、ステータス5.00午後で、今それはでそのステータスを変更していることに変更されました7:00 pm

    トリガーとイベントを使用する必要がありますが、目標を達成する方法がわかりません。

    誰でも教えてください。

    ありがとうございます。

  • +0

    ステータスは他にどのように使用されていますか?値が常に他のデータから決定できる場合は、それをまったく格納しないか、または計算列にすることを検討することをお勧めします。 –

    +0

    [ステータス]は、予定が有効か期限切れかを示します。 1:アクティブ、4は期限切れです。 – Redplane

    +0

    挿入と更新時にトリガーを作成する必要があります –

    答えて

    0

    トリガーを使用することはできますが、それでも問題は解決しません。あなたが望むものは、バックグラウンドで実行されるもので、有効期限が切れた任命のステータスが期限切れになると4に変更されます。

    これを達成するにはさまざまな方法があります。非常に簡単な方法の1つは、たとえば5分または1分に1回など、定期的に実行されるSQL Serverジョブエージェントジョブを作成することです。

    SQL Server Management Studioでサーバーを検索すると、最後にSQL Server Job Agentが表示されます。それを拡大して、ジョブの下に新しいジョブを作成します。内部でこのようなコードで一歩進んでください。

    UPDATE A 
    SET A.Status=4 
    FROM Appointment A 
    WHERE A.Status<>4 AND CURRENT_TIMESTAMP>A.[To] 
    

    これが役立ちます。

    +0

    Hmm ..クエリが毎分5分実行されると、サーバーが過負荷になる可能性があります。 – Redplane

    +0

    @Redplane:ステータスと日付に適切なインデックスを使用すると、更新が非常に迅速になります。それをスケジューリングすると、一定期間内に変更されたすべての行が更新されるため、サーバーの負荷が軽減され、個々の更新が少なくなります。 –

    +0

    私はSQLジョブについて読んだことがありますが、それは私のリアルタイムニーズを満たしていませんが、スピードは速いです、私はSQLジョブを使うべきだと思います。あなたの答えをありがとう:) – Redplane

    関連する問題