2017-03-08 38 views

回答

2

在SQL Server中,我們只有兩個虛表,你可以在觸發器workwith,這些都是「未插入」和「刪除」。例如:

插入操作:插入新記錄時「INSERTED」虛擬表包含新插入的記錄,其中「DELETED」虛擬爲空。

更新操作:更新任何記錄時,首先將舊記錄放入「DELETED」虛擬表中,並且新更新的記錄由「INSERTED」虛擬表保存。

這意味着您可以通過「已刪除」虛擬表從「已刪除」和當前更新值中獲取舊值。您可以查詢他們喜歡:

-- To get the old record value 

SELECT * FROM DELETED 

-- To get the updated value 

SELECT * FROM INSERTED 

刪除操作:當你刪除任何特定的記錄已刪除的記錄會被插入到「已刪除」虛表。

  1. SELECT * FROM UPDATED - 給出錯誤。

  2. 試試這個:

    DECLARE @OldVal INT,@NewVal INT
    SELECT @OldVal =列缺失了
    SELECT @NewVal =列從安裝

握住老新的值你可以比較他們的狀態。

+1

如果更新語句影響多行,則您的建議會引發錯誤,因爲觸發器是按語句觸發的,而不是按行觸發的。您不能在插入或刪除的表中假設單個行。永遠。 –

1

使用inserted表。
這是一個非常簡單的例子:

CREATE TRIGGER <name> ON <table> FOR UPDATE 
AS 

INSERT INTO <otherTable> (<Columns>) 
SELECT <Columns> 
FROM Inserted 

GO