2014-09-04 80 views
1

我想創建一個觸發器,當插入,刪除發生在表'Abschaetzung_has_Varianten'中時觸發,並更新一個名爲'Flag'的表。我需要從同一個表中選擇一個ID來更新標誌表。在編寫ID的SELECT時語法是否錯誤?我似乎沒有從選擇中獲得@abschID。任何人都可以幫助我。謝謝。更新在sql server中寫入的觸發器中的表

CREATE TRIGGER trig_update_flag on [Abschaetzung_has_Varianten] 
after insert, delete 
As 
Begin 
    DECLARE @x INT; 
    DECLARE @abschID INT; 
    DECLARE @value INT; 
    SELECT @value = 1; 
    SELECT @abschID = (SELECT TOP 1 Abschaetzung_ID FROM Abschaetzung_has_Varianten ORDER BY Abschaetzung_ID DESC); 
    SELECT @x = Count(*) FROM Flag WHERE AbschaetzID = @abschID 
    If @x > 0 
    Begin 
     UPDATE Flag Set [Flag] = @value WHERE AbschaetzID = @abschID; 
    end 
end 
+0

首先,您通常使用INSERTED,DELETED僞表,而不是原始表。其次這些表格可能有多個記錄,所以你需要編寫你的觸發器來允許。 – 2014-09-04 12:49:25

回答

1

你的代碼應該是更多這樣的:

CREATE TRIGGER trig_update_flag on [Abschaetzung_has_Varianten] 
after insert, delete 
as 
begin 
UPDATE Flag Set [Flag] = 1 
WHERE AbschaetzID IN (SELECT DISTINCT Abschaetzung_ID FROM INSERTED) 

UPDATE Flag Set [Flag] = 1 
WHERE AbschaetzID IN (SELECT DISTINCT Abschaetzung_ID FROM DELETED) 

end 

INSERTED是包含所有的更新或插入記錄的特殊觸發假表。

DELETED是一個特殊的觸發僞表,其中包含所有已刪除的記錄。

此表可能包含一次觸發調用的許多記錄。

上面的代碼並不是最高效的,可能並不適合您的具體要求,但希望您能明白。

+0

是的,它需要一點適應,但效果很好。謝謝您的幫助..!! – Shiva 2014-09-04 13:05:21