В SQL триггеры — это мощные инструменты, позволяющие автоматически выполнять набор действий при возникновении определенных событий, например операции обновления таблицы. Одним из распространенных сценариев является использование «вставленных» и «удаленных» таблиц в триггере обновления для доступа к данным и управления ими. В этой статье мы рассмотрим несколько методов с примерами кода для эффективного использования этих таблиц в триггерах обновления SQL.
- Основное использование:
«Вставленная» таблица содержит обновленные данные после операции обновления, а «удаленная» таблица содержит исходные данные до обновления. Вот простой пример:
CREATE TRIGGER [dbo].[UpdateTrigger]
ON [dbo].[YourTable]
AFTER UPDATE
AS
BEGIN
-- Accessing inserted table
SELECT * FROM inserted;
-- Accessing deleted table
SELECT * FROM deleted;
-- Perform additional actions based on the data
END;
- Аудит изменений.
Одним из распространенных случаев использования является аудит изменений, внесенных в таблицу. Вы можете сравнить данные в «вставленных» и «удаленных» таблицах, чтобы определить, что было обновлено. Вот пример:
CREATE TRIGGER [dbo].[AuditTrigger]
ON [dbo].[YourTable]
AFTER UPDATE
AS
BEGIN
INSERT INTO AuditTable (ModifiedColumn, OldValue, NewValue)
SELECT 'ColumnName', deleted.ColumnName, inserted.ColumnName
FROM inserted
INNER JOIN deleted ON inserted.PrimaryKey = deleted.PrimaryKey
WHERE inserted.ColumnName != deleted.ColumnName;
END;
- Откат изменений.
В некоторых случаях вам может потребоваться запретить выполнение определенных обновлений. Используя триггер «вместо» и оператор «откат», вы можете отменить изменения. Вот пример:
CREATE TRIGGER [dbo].[RollbackTrigger]
ON [dbo].[YourTable]
INSTEAD OF UPDATE
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted WHERE ColumnName = 'InvalidValue') > 0
BEGIN
ROLLBACK;
RAISERROR ('Invalid values detected. Update operation rolled back.', 16, 1);
END
ELSE
BEGIN
-- Perform the actual update
UPDATE [dbo].[YourTable]
SET ColumnName = inserted.ColumnName
FROM inserted
WHERE [dbo].[YourTable].PrimaryKey = inserted.PrimaryKey;
END;
END;
Таблицы «вставлено» и «удалено» предоставляют ценные данные в триггерах обновления, что позволяет реализовать различные функции, такие как аудит изменений и откат обновлений. Используя примеры и методы, обсуждаемые в этой статье, вы можете повысить эффективность и контроль операций базы данных SQL.
Не забудьте адаптировать примеры кода к конкретной схеме и требованиям вашей базы данных. Приятного кодирования!