2013-01-24 59 views
0

我使用此代碼檢查新條目的元素是否等於以前插入的數據的元素。在AFTER INSERT觸發器中檢索初始表SQL

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中。所以情況總是如此。你能幫我解釋爲什麼會這樣嗎?有沒有辦法只檢索沒有新條目的初始表?謝謝!

回答

1

您的觸發器是AFTER INSERT,表Table1。如果您不希望在表格中找到該記錄,則應該是BEFORE INSERT

選擇:使用INSTEAD OF INSERT觸發器。

添加另一列接受空值。使它成爲數字列,以便它快速。不要在插入中插入任何值。然後,在AFTER INSERT TRIGGER中,那些有空列的行是新行。那些列中填滿了東西的是舊的。 然後用值更新空列。

如:添加列mark 插入後,尋找名:

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

一旦你發現了它是否之前就已經存在,更新的東西的一切:

update table1 set mark = 1 where mark is null 
+0

的是沒有之前在MSSQL 2005中觸發...所以與後插入它是不可能的? – iiirxs

+0

是的。不可能。 您可以使用INSTEAD OF INSERT觸發器。似乎它是由SQL 2005支持。 – GeorgeVremescu

+0

我使用INSTEAD OF INSERT觸發器解決了我的問題。非常感謝。 – iiirxs

相關問題