使用触发器和审计表在SQL中向表中添加多个值

时间:2014-09-04 09:05:24

标签: sql sql-server tsql

我遇到的问题是当我在表中插入多个值或删除表中存在多次的值时。我不确定如何解决这个问题。

`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`

1 个答案:

答案 0 :(得分:0)

你误解了触发器和INSERTED和DELETED的工作原理。当您使用触发器将50条记录插入到表中时,触发器将被调用一次,并且INSERTED表中有50条记录。要做你正在做的事情,你必须在1表中插入另一个表的所有记录。

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

您的删除与此非常相似。