SQL Server 2005删除从已删除的触发器选择返回null

时间:2009-05-11 19:44:17

标签: sql-server sql-server-2005 triggers

我在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触发器中看到此行为。有关如何修复触发器的任何建议吗?

2 个答案:

答案 0 :(得分:6)

只删除一条记录或删除多条记录时会发生这种情况吗?如果删除多个记录,则触发器将失败。

你应该做更多这样的事情:

插入hl7_lock_log(user_name,action,hl7_id,dtm) select system_user,'Delete',hl7_id,getdate() 来自已删除

答案 1 :(得分:1)

您确定记录在“已删除”表中吗?如果在主表上运行删除语句删除零记录,则上面的代码仍然会插入到锁定日志中。

也许在插入之前检查是否有任何记录被删除可以解决问题。

正如Thirster所指出的那样,你需要在一个声明中调整被删除的多个记录。