你能在表格中的字段上创建一个触发器吗?

时间:2010-03-18 17:47:36

标签: sql-server-2008 triggers

是否可以在正在更新的表中的字段上创建触发器?

所以,如果我有:

TableA
  Field1
  Field2
  ....

我希望在更改Field1时更新某个值。在这个例子中,我希望在更新Field1时更新Field2,但是不希望该更改导致另一个触发器调用等...

4 个答案:

答案 0 :(得分:2)

请提供更多详情并问自己是否真的需要触发器?根据我的经验,像这样的触发器似乎在一两次交互中成为技术债务。

答案 1 :(得分:0)

在这种情况下,您可以使用INSTEAD OF触发器。这些不是递归触发的。关于递归触发器的Read here for more information(搜索“递归”)。

与往常一样,非常小心你使用INSTEAD OF触发器做什么。你可以做一些非常讨厌的事情(比如当有人调用一个插入语句时,你可以将它转移到某个随机记录上的删除语句 - 即一件非常讨厌的事情!)。

答案 2 :(得分:0)

这似乎解决了我的问题:

CREATE TRIGGER trg_name ON TableA
AFTER UPDATE
AS 
BEGIN
IF UPDATE(FieldA) 
  update import_status set FieldB = 0
END
GO

更新

正如评论中所指出的,这通常是一个坏主意,因为它会更新每一行,这可能不是你想要的。但是,在这种特殊情况下,只会有一行,它只用于存储时间戳和标志字段。

答案 3 :(得分:0)

您可以通过从DELETED中选择其先前的值来检查Field1值是否已更改。

SELECT @prevValue = Field1 FROM DELETED WHERE ...