【发布时间】:2010-09-29 03:36:17
【问题描述】:
考虑一下这个触发器:
ALTER TRIGGER myTrigger
ON someTable
AFTER INSERT
AS BEGIN
DELETE FROM someTable
WHERE ISNUMERIC(someField) = 1
END
我有一个表 someTable,我试图阻止人们插入不良记录。就本题而言,不良记录的字段“someField”全为数字。
当然,执行此操作的正确方法不是使用触发器,但我不控制源代码...只是 SQL 数据库。所以我并不能真正阻止坏行的插入,但是我可以马上删除它,这已经足够满足我的需要了。
触发器工作,有一个问题......当它触发时,它似乎永远不会删除刚刚插入的坏记录......它会删除任何旧的坏记录,但它不会删除刚刚插入的坏记录.因此,经常会有一条坏记录在周围漂浮,直到其他人出现并进行另一次 INSERT 时才会删除。
我对触发器的理解有问题吗?触发器运行时新插入的行是否尚未提交?
【问题讨论】:
-
事务尚未提交(这就是您可以回滚的原因,这可能是您最好的答案),但您可以更新/删除行,因为触发器与 INSERT 语句在同一个事务中.
标签: sql-server sql-server-2005 triggers