0

我使用此代码检查新条目的元素是否等于先前插入的数据的元素。

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 中。所以条件总是为真。你能帮我为什么会这样吗?有没有办法只检索没有新条目的初始表?谢谢!

4

1 回答 1

1

你的触发器AFTER INSERT在桌子上Table1BEFORE INSERT如果您不希望在表中找到记录,则应该是这样。

替代方案:使用 INSTEAD OF INSERT 触发器。

或者

添加另一个接受 null 的列。让它成为一个数字列,这样它会很快。不要在插入时在其中插入任何值。然后,在 AFTER INSERT TRIGGER 中,该列为空的行是新行。列中填满东西的是旧的。然后用值更新空列。

eg:添加列mark 插入后,查找名称:

SELECT * FROM Table1 WHERE Name= @Name1 and mark is not null

一旦您发现它以前是否存在,请使用以下内容更新所有内容:

update table1 set mark = 1 where mark is null
于 2013-01-24T22:58:40.003 回答