私は開発中のトリガーを持っており、基本的にステートメントの意味で更新を処理したいと考えていますが、現時点でUpdateはそれほど心配していません。DeleteInsert
最終結果は、それぞれ&である2 つのステータス フィールドactive&を持つことです。フィールドは、手動でレコードを無効にするために使用されます。フィールドに変更の値が含まれていることを確認したいと思います。inactivebitdatetimeactiveinactiveactive
理想的には、レコードのフィールドにactive=0を使用して日時スタンプを確認して配置したいと思います。now()長期的には、inactiveフィールドに日時スタンプがまだないことを検証したいと思いますが、今のところはうまくオーバーライドしています。同様に、値が存在するかどうかを確認し、フィールドactive=1をクリアしたいと考えています。inactive
inactiveフィールドはnullable競合しないようになっています。
現在のトリガー定義:
CREATE TRIGGER dbo.TRG_tblRegistration_Inactive
ON dbo.tblRegistration
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF update(active) BEGIN
update r
set inactive=now()
from tblRegistration r
join inserted i on r.id = i.id
where i.active = 0
END
END
inserted&deletedトリガー テーブルについてはよく理解しています。
質問:
- トリガー内に、最終的に望ましい目標を達成するためのより良いロジック パターンはありますか?
- 、または?を使用して
inactive値を送信する場合の考慮事項active=0active=1
トリガーの現在のフォーム:
ALTER TRIGGER dbo.TRG_tblRegistration_Inactive
ON dbo.tblRegistration
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF update(active) BEGIN
update r
set inactive=getdate()
from tblRegistration r
join inserted i on r.id = i.id
where i.active = 0
update r
set inactive=NULL
from tblRegistration r
join inserted i on r.id = i.id
where i.active=1
END
END
それは機能し、期待どおりに機能しますが、最初にこれを行うためのより良い方法がないことを確認したいと考えています (データベース側またはトリガーで)。