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
将始终反映lunIn
和lunOut
之间的差异 - 对于所有现有行,并且在您插入新行之后也会自动反映。
【讨论】:
以上是关于SQL AFTER 插入更新触发器的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server“AFTER INSERT”触发器看不到刚刚插入的行
SQL Server - 在模式中触发AFTER INSERT表