触发特定字段的更新

时间:2013-10-25 17:29:52

标签: sql-server triggers

我希望创建一个触发器,只要添加DATE_END,就会在表格中添加DATE_BEGIN和DATE_END之间的差异。

例如,假设我有一个包含以下列的表

ProjectName,Type,DATE_BEGIN,DATE_END,DATE_DIFF

我想要在更新DATE_END后立即使用DATE_BEGIN和DATE_END之间的差异自动填充DATE_DIFF。所以我确定我正在寻找在发生UPDATE时执行某些操作的触发器,但是如何以这种方式跟踪该特定列?

我对触发器有点新意,所以我不知道从哪里开始......

2 个答案:

答案 0 :(得分:1)

您确认:

您必须从INSERTED(新值)和DELETED(旧值)获取DATE_END 并且只要它们不同,您就更新DATE_DIFF

IF ((SELECT DATE_END FROM INSERTED) <> (SELECT DATE_END FROM DELETED))

BEGIN ...

文档:Using the inserted and deleted Tables

答案 1 :(得分:1)

为什么不使用计算列?

这样的事情:

alter table TableName drop column DATE_DIFF
alter table TableName add DATE_DIFF as (case when DATE_END is not null then datediff(day, DATE_BEGIN, DATE_END) else null end)

如果您不希望天数存在差异,请在调用函数datediff()中选择其他内容。