Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2013, 00:08   #1
DiCanio
 
Аватар для DiCanio
 
Регистрация: 03.10.2009
Сообщений: 9
По умолчанию Как лучше сохранить историю редактирования таблицы?

Всем привет!
Рассмотрим следующие таблицы.
Employee:
Код:
CREATE TABLE Employee
(
ID INT IDENTITY(1,1) PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
)
History:
Код:
CREATE TABLE History
(
ID INT IDENTITY(1,1) PRIMARY KEY,
ColumnName NVARCHAR(50),
OldValue NVARCHAR(50),
NewValue NVARCHAR(50)
)
Employee редактируется посредством хранимки, аля EmployeeUpdate:

Код:
CREATE PROCEDURE spEmployeeUpdate
@employeeID INT, @firstName NVARCHAR(50), @lastName NVARCHAR(50)
AS BEGIN --inserting END
Так вот, идея в том, чтобы при редактировании пользователя c @userID, в таблицу History вставлялась запись, содержащая измененные значения:

"название колонки" "старое значение" "новое значение"

или

"LastName" "Anton" "Anna"

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

Это можно сделать примерно так:

1. Объявить old-переменные и инициализировать их SELECT-ом по @userID
2. Сделать something like this:
Код:
BEGIN TRAN t1
UPDATE Employee...
-- updating employee
BEGIN TRAN t2
IF (@oldFirstName != @firstName)
--insert into history
IF (@oldLastName != @lastName)
--insert into history
END TRAN t2
END TRAN t1
Но нужен более универсальный и лучший способ, потому как таблица Employee может содержать 10 и больше атрибутов. Делать 10 IF-ов не очень как-то

Делитесь предложениями, буду рад!

With regards,
Paolo Di Canio
DiCanio вне форума Ответить с цитированием
Старый 11.11.2013, 08:19   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Триггер на апдейт написать, в нём будет вся инфа по изменённой записи в виде набора данных, все эти данные и класть в историю.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли способ редактирования значений сводной таблицы руками Daren Microsoft Office Excel 4 14.03.2011 13:47
Как лучше сделать форму редактирования таблицы ? Allan Stark Microsoft Office Access 15 09.02.2011 22:30
ASP.NET. Как лучше всего сохранить запрос? Stilet ASP.NET 4 01.06.2010 13:11
Как удалить историю IP SeRhy Безопасность, Шифрование 3 12.03.2009 02:48