Контрольная работа: Відстежування змін за допомогою стовпців і таблиць аудиту
,deleted. EndDate
,deleted. MinQty
,deleted. MaxQty
,deleted. rowguid
,deleted. ModifiedDate
,GETDATE ()
’UPDATE’ INTO Sales. SpecialOffer_Audit
WHERE SpecialOfferID = 10
Пропозиція OUTPUT поміщає змінені дані в рамках простого доступу в процесі зміни даних. В процесі операцій UPDATE і DELETE доступний префікс DELETED. У процесі операцій UPDATE і INSERT доступний префікс INSERTED. Потрібно звернути увагу на те, що обидва префікси не можуть бути доступними одночасно, на відміну від таблиць deleted і inserted, які використовуються в тригерах. Ця взаємодоступність вимагає, щоб різні операції оброблялися по-різному для збору потрібних даних і переміщення їх в таблиці аудиту.
Відновлення даних за допомогою таблиць аудиту
Тепер, коли у нас є два варіанти завантаження даних в таблицю аудиту, можна подумати, для чого використовувати ці дані. Оскільки всі зміни в таблиці зберігаються в таблиці аудиту, можна відновити будь-які зміни даних, перезаписавши поточні дані зміною, яку потрібно зберегти. Таблиця аудиту може зберігати декілька версій даних, тому найчастіше це доведеться робити уручну. Проте можна також створити обслуговуючу процедуру, що зберігається, для відміни найостаннішої зміни.
Використання таблиць аудиту для відновлення змінених даних
1. Визначаємо, який запис слід відновити. Для цього потрібно ідентифікувати змінний запис і дані, які його замінять.
2. Користуємось додатком UPDATE для перезапису поточних даних зміною, яку слід відновити в цій таблиці. У даному прикладі доведеться використовувати або властивість rowguid, або стовпець SpecialOf f erID у поєднанні з AuditModif iedDate як критерієм для інструкції UPDATE, як показано нижче.
USE AadventureWorks
GO
UPDATE Sales. SpecialOffer
SET Description = а. Description
,DiscountPct = а. DiscountPct
,Type = а. Type
,Category = а. Category
,StartDate = а. StartDate
,EndDate = а. EndDate
,MinQty = а. MinQty
,MaxQty = а. MaxQty
,rowguid = а. rowguid
,ModifiedDate = а. ModifiedDate
FROM Sales. SpecialOffer_Audit а
WHERE Specialoffer. SpecialOfferlD = 10
AND а. SpecialOfferlD = 10
AND а. AuditModifiedDate = '2006-04-02 22: 40: 27.513'