Мы выбрали отдельные столы, так как это сделает вашу основную таблицу более скудной и быстрой.Мы также выбрали триггеры, полагая, что если вы когда-нибудь измените механизм ввода, вам не нужно будет переписывать свой аудит.Также он может фиксировать случайные изменения на стороне администратора базы данных.
Поскольку обновление - это, по сути, удаление, а затем вставка, вы можете достичь того, что было предложено с помощью одного триггера - это то, что мы сделали.
Создайте таблицу, точно соответствующую вашей существующей таблице, но с некоторыми добавленными столбцами: AUDIT_GUID VARCHAR (40), AUDIT_TIMESTAMP DATETIME, AUDIT_ACTION VARCHAR (20)
Создать "ПОСЛЕ ВСТАВКИ, УДАЛИТЬ, ОБНОВИТЬ "Запуск по следующему общему шаблону (просто добавьте больше столбцов, если необходимо).
CREATE TRIGGER CustomerAudit ON Customer
AFTER INSERT,DELETE,UPDATE AS
BEGIN
IF (TRIGGER_NESTLEVEL()>1) RETURN
DECLARE @Time DateTime = CURRENT_TIMESTAMP
DECLARE @Audit_GUID varchar(100) = NEWID()
INSERT INTO Customer_History (FirstName, LastName, Audit_Date, Audit_Action, Audit_GUID)
SELECT
FirstName, LastName, @Time, 'Delete', @Audit_GUID
FROM
Deleted
INSERT INTO Customer_History
(FirstName, LastName, Audit_Date, Audit_Action, Audit_GUID)
SELECT
FirstName, LastName, @Time, 'Insert', @Audit_GUID
FROM
Inserted
END
Если вы хотите найти обновления, они будут строками втаблица истории, которая имеет удаление и обновление с тем же значением Audit_GUID.Отметка времени также позволяет вам проверять изменения, внесенные в определенное время, и мы также добавили текущего пользователя, чтобы найти виновного в случае необходимости!