Таблицы истории SQL Server 2005 с использованием триггеров - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть таблица, и я хочу вставить текущие значения записей, которые обновляются или удаляются.

Я пытался создать триггер перед обновлением и перед удалением, но SQL Server 2005 не нравится слово перед.

Как мне заставить это работать?

Я хочу, чтобы триггер взял текущую запись и скопировал ее в таблицу истории, которая является зеркалом базовой таблицы с двумя добавленными полями dateBackedUp (которая принимает getDate ()) и полем с именем action (выполняется действие «обновлен» или «удален»)

пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

SQL Server не имеет понятия BEFORE INSERT или BEFORE DELETE.Подобные операции аудита действительно не нужно выполнять перед действием, большую часть времени - поэтому просто используйте триггеры AFTER INSERT и AFTER UPDATE, которые у вас уже есть.

с помощьюУдаленная таблица работает, поскольку она дает мне данные, которые будут обновлены.вставленная таблица предоставляет новые значения ... а не те, которые я хочу регистрировать.

Когда вы выполняете триггер AFTER UPDATE, псевдотаблица Inserted содержит новые значения - иDeleted таблица содержит старые значения.Таким образом, для триггера AFTER UPDATE вы можете получить доступ к обеим псевдостолам и получить как старые, так и новые значения.

Триггер AFTER INSERT имеет доступ только к псевдотаблице Inserted, которая содержит значения, которые быливставлен.

Триггер AFTER DELETE имеет доступ только к псевдотаблице Deleted, которая содержит значения удаленных строк.

0 голосов
/ 15 сентября 2010
create TRIGGER [update_Project] ON Project
FOR UPDATE
AS
INSERT project_history 
SELECT * FROM deleted

с использованием удаленной таблицы работает, поскольку она дает мне данные, которые будут обновлены.вставленная таблица содержит новые значения ... а не те, которые я хочу регистрировать.

0 голосов
/ 15 сентября 2010

Вам не нужно использовать ключевое слово before.Вы можете создать триггер как обычно, а затем выбрать из таблицы deleted, которая создается, когда триггер ..э ... запускается.

например,

create trigger Audit
on tblCustomers
after update, delete

insert into tblAudit
select * from deleted;

(не проверено, поскольку у меня нет SQL Server, но если он не работает, то запись BOL для Create Trigger должна сообщить вам о deleted таблица)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...