SQL AFTER 插入更新触发器

Posted

技术标签:

【中文标题】SQL AFTER 插入更新触发器【英文标题】:SQL AFTER Insert Trigger for Update 【发布时间】:2015-04-17 00:58:13 【问题描述】:

我试图在使用触发器插入lunOut 列值之后更新lunTot 列,但不知何故它没有更新。如果我使用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

【问题讨论】:

你用的是什么服务器?制作一个before 触发器,设置 :new.lunTot 变量,具体取决于您的 sql 风格。 对 SQL Server 不够熟悉。看起来您需要一个 INSTEAD OF 触发器。 感谢 cmets。 【参考方案1】:

为什么不将lunTot 设为计算 列?无需为此使用触发器....

只需删除您现在拥有的现有 lunTot

ALTER TABLE dbo.lunTime
DROP COLUMN lunTot

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

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

现在您的列lunTot始终反映lunInlunOut 之间的差异 - 对于所有现有行,并且在您插入新行之后也会自动反映。

【讨论】:

以上是关于SQL AFTER 插入更新触发器的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server“AFTER INSERT”触发器看不到刚刚插入的行

AFTER DELETE 触发器触发但不将记录插入审计表

SQL Server - 在模式中触发AFTER INSERT表

SQL 触发器

sql server 的after触发器之insert触发器实例

SQL SERVER 中,after insert触发器是啥意思,应该如何使用?