2010-09-15 3 views
0

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

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

Как я могу заставить это работать?

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

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

+0

Пожалуйста, разместите код, который вы пытаетесь. –

ответ

1

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

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

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

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

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

0

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

например

create trigger Audit 
on tblCustomers 
after update, delete 

insert into tblAudit 
select * from deleted; 

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

0
create TRIGGER [update_Project] ON Project 
FOR UPDATE 
AS 
INSERT project_history 
SELECT * FROM deleted 

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

+0

Если вы отправляете код или XML, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «код» (101 010) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! Плюс: вы должны ** обновить ** свой исходный вопрос, отредактировав его, а не добавив «фиктивный» ответ ... –

Смежные вопросы