1

トリガーに関する私の経験は、更新、挿入、または削除の後に何かを行うということです。しかし、日付が今日のときにレコードを自動的に更新するトリガーを作成することは可能ですか? たとえば、4 列のテーブルがあります。

   StartDate         EndDate         Active          Expired 
---------------------------------------------------------------
   2013-01-03      2013-01-05          True           False

これは 1 つのレコードです。私が望むのは、今日の日付 (GETDATE()) である場合に、このレコードの前後にActive列をFalse更新するトリガーを作成することです。どうすればいいですか?ExpiredTrueEndDate

4

3 に答える 3

2

いいえ、私の知る限り、この状況ではトリガーを使用できません。データ/レコードが変更されると、トリガーが実行されます。あなたの場合、データは変更されておらず、時間だけが経過しています。

このタスクを実行するには、「SQL ジョブ」を探してください。

于 2013-01-03T12:36:00.043 に答える
1

列を作成してActive思いExpiredどおりに動作させるには、それらを計算列にする必要があります。これらの列の sql は次のようになります (それらがDATE列であると仮定します)。

--For column Active
CASE WHEN EndDate < CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END

--For Column Expired
CASE WHEN EndDate >= CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END
于 2013-01-03T12:45:30.983 に答える
0

あなたの場合、2つのオプションがあります:

getdate()ビューを作成します (時間を削除するために 112 に変換します):

create view <your view name>
as
    select
        T.StartDate,
        T.EndDate,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Active,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Expired
    from <your table> as T

そして、ビューからデータを選択できます(ところで、両方の列は必要ないと思います。それらは互いに依存しているためです)

または、SQL ジョブを作成して、日付が今日と等しいかどうかを確認し、列を更新することもできます。

于 2013-01-03T12:36:42.873 に答える