2010-11-24 23 views
2

テーブルのどれかが更新されていないときにのみ更新されるトリガーがあります。指定した列がテーブルSQL Serverのトリガーが正しく起動しない

CREATE TRIGGER [afm].[afm_rm_dwgs_t] ON [afm].[rm] 
    FOR UPDATE 
AS 
    IF (UPDATE(area) OR UPDATE(dv_id) 
    OR UPDATE(dp_id) OR UPDATE(rm_cat) 
    OR UPDATE(rm_type) OR UPDATE(rm_std)) 
    BEGIN 
     SET NOCOUNT ON; 
     UPDATE afm.afm_dwgs 
     SET dwg_updt = 1 
     WHERE afm_dwgs.dwg_name IN (SELECT dwgname FROM inserted) 
    END 

答えて

1

いいえ、トリガが[AFM] ON UPDATE FOR として定義されている内の他のないフィールドを更新しているときにのみ、火災ので、これを書き換える方法はありますか。[RM]、そのテーブルの更新ごとに常に起動します。その先を制限する方法はありません。

トリガー内のチェックによって、実際に何かを実行することからの「余分な」トリガーアクティベーションが排除されます。

1

はあなたが地域の列が更新された場合、コードは次のようになりますチェックすることとします

declare @oldArea varchar(50) 
declare @newArea varchar(50) 

select @oldArea= area from deleted 
select @newArea=area from inserted 

if (@oldArea <> @newArea) 
-- area is updated 
+0

または単にif(UPDATE([FieldName])) '? – bevacqua

+0

いいえ、どうやって変わったのか、変わったのかは分かりますか? –

+0

@Nico:Update(fieldname)は、列がデータ内にあったと言っているだけです。それが変わったとは言いません。 – NotMe

0

UPDATEは()のみの列がデータセットに含まれていたことを意味しています。基礎となるデータが異なるかどうかは一切表されません。

これより少し複雑になる必要があります。

変更があるかどうかを確認するには、DELETEDとINSERTEDの値を比較する必要があります。

さらに詳しい情報はthis linkをご覧ください。

関連する問題