我在SQL Server中有一个名为hl7_lock的表,其中包含以下列:
hl7_id lock_dtm lock_user
我在表上有3个触发器,用于UPDATE,INSERT和DELETE
表永远不会更新,但INSERT触发器工作正常。 但是,此删除触发器偶尔会在hl7_lock_log中创建一个空值为hl7_id
的记录 SET NOCOUNT ON;
declare @hl7_id decimal(18,0)
select @hl7_id = hl7_id from deleted
insert into hl7_lock_log (user_name, action, hl7_id, dtm)
values(system_user, 'Delete', @hl7_id,getdate())
其他字段已成功插入,但hl7_id为null。已删除的记录没有空的hl7_id。
我们在周末安装了SQL Server SP 2,但这并没有改善这种情况。有没有人在SQL Server触发器中看到此行为。有关如何修复触发器的任何建议吗?
答案 0 :(得分:6)
只删除一条记录或删除多条记录时会发生这种情况吗?如果删除多个记录,则触发器将失败。
你应该做更多这样的事情:
插入hl7_lock_log(user_name,action,hl7_id,dtm) select system_user,'Delete',hl7_id,getdate() 来自已删除
答案 1 :(得分:1)
您确定记录在“已删除”表中吗?如果在主表上运行删除语句删除零记录,则上面的代码仍然会插入到锁定日志中。
也许在插入之前检查是否有任何记录被删除可以解决问题。
正如Thirster所指出的那样,你需要在一个声明中调整被删除的多个记录。