更新时触发触发器(不包括某些字段更改)

时间:2013-07-05 11:24:17

标签: sql sql-server

我已经定义了我的触发器:

CREATE TRIGGER [dbo].[trtablename]
    ON [dbo].[tablename]
    AFTER UPDATE
    AS update tablename set row_version = row_version + 1 
       where id in (select id from inserted)

有一个名为Row_Status的字段。应该在不增加row_version字段的情况下进行修改。如何在触发器中创建这样的条件?

2 个答案:

答案 0 :(得分:2)

您需要根据可在触发器中调用的UPDATE()函数添加条件。

类似的东西:

CREATE TRIGGER [dbo].[trtablename] ON [dbo].[tablename]
AFTER UPDATE
AS

If not update(Row_Status)
begin

  update tablename set row_version = row_version + 1 
  where id in (select id from inserted)

end

根据您的表/列和可能发生的UPDATE操作,您可能需要增加检查的复杂性,但希望这会指向正确的方向。

答案 1 :(得分:2)

使用UPDATE函数的唯一缺点是,如果在update语句中甚至提到了该字段,那么它将是真的。即使它被设定为自己。

CREATE TRIGGER [dbo].[trtablename]
ON [dbo].[tablename]
AFTER UPDATE
AS
IF NOT UPDATE (Row_Status) 
    update tablename set row_version = row_version + 1 
       where id in (select id from inserted)