P.B*_*key 5 sql triggers sql-server-2000
我的扳机扣动了INSERT, UPDATE and DELETE。我需要从适当的内存表(inserted, deleted)中插入,具体取决于触发触发器的操作。由于仅inserted填充了INSERT或deleted上,DELETE我想我可以只进行插入,如果没有行,我就很好。
但是,UPDATE填充两个表。deleted我只想要来自on的值UPDATE。我尝试使用函数测试更新UPDATE(column),但这TRUE甚至在INSERT. 那么,我该如何测试呢UPDATE?
ALTER TRIGGER CREATE_tableAudit
ON dbo.table
FOR INSERT, UPDATE, DELETE
AS
BEGIN
IF(UPDATE([column1]))--returns true on INSERT :(
BEGIN
INSERT INTO [dbo].[tableAudit]
([column1]
,[CreateDate]
,[UpdateDate])
SELECT * from deleted --update
END
ELSE
BEGIN
--only inserted is populated on INSERT, visa-versa with DELETE
INSERT INTO [dbo].[tableAudit]
([column1]
,[CreateDate]
,[UpdateDate])
select * from inserted --insert
INSERT INTO [dbo].[tableAudit]
([column1]
,[CreateDate]
,[UpdateDate])
select * from deleted --delete
END
Run Code Online (Sandbox Code Playgroud)
假设行的主键没有更改,您可以通过在主键字段上连接 Inserted 和 Deleted 表来查找更新的行。如果连接这两个表产生行,那么您可以放心地假设这些行已更新。
如果更新确实更改了行的主键,那么您最好将其视为两个操作:删除和插入。