2014-09-04 43 views
0

我遇到的問題是將多個值插入表中或刪除表中存在多次的值。我不確定如何解決此問題。使用觸發器和審計表在SQL中向表中添加多個值

`CREATE TRIGGER [dbo].[Q5Trigger] 
ON [dbo].[WF] 
AFTER INSERT, DELETE 
AS 
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'AuditTable') 
    BEGIN 
    CREATE TABLE [dbo].[AuditTable](
    Word   VARCHAR(100), 
    Frequency INT, 
    Date   DATETIME, 
    Type   VARCHAR(100) 
    ) 
END 
IF EXISTS (SELECT * FROM inserted) 
    BEGIN 
    INSERT INTO AuditTable VALUES((SELECT Word FROM inserted),(SELECT Frequency FROM inserted), CURRENT_TIMESTAMP, 'Inserted') 
END 
IF EXISTS (SELECT * FROM deleted) 
    BEGIN 
    INSERT INTO AuditTable VALUES((SELECT Word FROM deleted),(SELECT Frequency FROM deleted), CURRENT_TIMESTAMP, 'Deleted') 
END` 

回答

0

您誤解了觸發器和INSERTED和DELETED的工作方式。將50條記錄插入帶有觸發器的表中時,觸發器會被調用一次,而INSERTED表中有50條記錄。要做你正在做的事情,你必須在1個表中插入另一個表的所有記錄。

INSERT INTO AuditTable (Word,Frequency,LogWhen,LogType) 
SELECT Word,Frequency, CURRENT_TIMESTAMP, 'Inserted' FROM inserted 

您的刪除與此非常相似。