SQL AFTER插入触发器以进行更新

时间:2015-04-17 00:58:13

标签: sql sql-server-2008 triggers

我尝试在使用触发器插入lunTot列值后更新lunOut列,但不知何故它没有更新。如果我使用Update语句查询它运行良好。

插入触发器(不工作)后:

create trigger trg_AfterInsertLunTot
on lunTime
after insert
as
begin
    update lunTime
    set lunTot = DATEDIFF(minute, lunIn, lunOut) 
    from lunTime
end
go

使用Update查询(正在工作)

update lunTime
set lunTot = DATEDIFF(minute, lunIn, lunOut) 
from lunTime

1 个答案:

答案 0 :(得分:2)

为什么不让lunTot成为计算列?不需要使用触发器......

只需删除您现有的lunTot

即可
ALTER TABLE dbo.lunTime
DROP COLUMN lunTot

然后再将其定义为计算列:

ALTER TABLE lunTime 
ADD lunTot = DATEDIFF(minute, lunIn, lunOut)

现在,您的专栏lunTot 总是反映lunInlunOut之间的差异 - 对于所有现有行,并且在您插入新行后自动生成。