我使用此代码检查新条目的元素是否等于先前插入数据的元素。
CREATE TRIGGER trig1 ON Table1
AFTER INSERT
AS
DECLARE trigcursor CURSOR FOR
SELECT Name FROM INSERTED
DECLARE @Name1 varchar(80)
OPEN trigcursor;
FETCH NEXT FROM trigcursor INTO @Name1
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT * FROM Table1 WHERE Name= @Name1)
BEGIN
...
END
FETCH NEXT FROM trigcursor INTO @Name1
END
问题在于,由于某种原因,新条目也存在于Table1表中,而不仅仅存在于INSERTED中。所以情况总是如此。你能帮助我为什么会这样吗?有没有办法只检索初始表而没有新条目?谢谢!
答案 0 :(得分:1)
您的触发器AFTER INSERT
位于表Table1
上。如果您希望不在表中找到记录,那么它应该是BEFORE INSERT
。
替代方案:使用INSTEAD OF INSERT触发器。
OR
添加另一个接受null的列。将它设为数字列,以便快速。请勿在插件上插入任何值。然后,在AFTER INSERT TRIGGER中,该列为空的行是新的。列中填充的东西是旧的。 然后用值更新空列。
例如:添加列mark
插入后,查找名称:
SELECT * FROM Table1 WHERE Name= @Name1 and mark is not null
一旦你发现它之前是否存在,用某些东西更新所有内容:
update table1 set mark = 1 where mark is null