Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
PavelVX
Member

Откуда: Новосибирск
Сообщений: 211
Уважаемые, добрый день!
По работе возникла необходимость немного подправить логику работы MS SQL server (2012).
Сам работаю с PostgreSQL.
Возник вопрос: как правильнее всего обновлять время последнего редактирования записи.
Погуглил, если я правильно понимаю, то используем insted of update trigger, а в нем
(pk - primary key, f* - любое другое поле, f_last_edit - поле для хранения времени последней редакции записи):
update dst_tbl
SET f1 = ins.f1, f2 = ins.f2, f3 = ins.f3, f_last_edit = getdate()
from inserted ins
where dst_tbl.pk = ins.pk;

Получается, что если кто-то добавит еще одно поле в таблицу dst_tbl, то триггер необходимо обязательно менять.
Возможно есть более элегантное решение данного вопроса?
2 дек 16, 08:10    [19958198]     Ответить | Цитировать Сообщить модератору
 Re: обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
IDVT
Member

Откуда:
Сообщений: 320
Я так понимаю, редактирование происходит на стороне клиента? если я прав, тогда зачем тут триггер, почему нельзя при обновлении данных также обновить и эту дату?
2 дек 16, 09:02    [19958270]     Ответить | Цитировать Сообщить модератору
 Re: обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
PavelVX
Member

Откуда: Новосибирск
Сообщений: 211
Возможно обновление и не только клиентским приложением.
Пакетное обновление возможно и напрямую.
2 дек 16, 09:30    [19958354]     Ответить | Цитировать Сообщить модератору
 Re: обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
PavelVX
Member

Откуда: Новосибирск
Сообщений: 211
Да и вообще, по моему личному мнению, все подобные операции должны делаться в триггере, на стороне сервера.
2 дек 16, 09:35    [19958372]     Ответить | Цитировать Сообщить модератору
 Re: обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
PavelVX
Погуглил, если я правильно понимаю, то используем insted of update trigger, а в нем
(pk - primary key, f* - любое другое поле, f_last_edit - поле для хранения времени последней редакции записи):

PavelVX
Получается, что если кто-то добавит еще одно поле в таблицу dst_tbl, то триггер необходимо обязательно менять.
Возможно есть более элегантное решение данного вопроса?
Более элегантного нет :-(

Либо insted of update trigger, и править его при изменении таблицы, либо after update trigger, и тогда будет 2 обновления вместо одного, либо явно менять значения этого поля в стейтменте обновления (но, действительно, концептуально такую вещь лучше делать независимо от клиента).

Выбор варианта зависит от особенностей вашей системы.
Например, 2 обновления вместо одного выглядит вроде бы некрасиво, зато это надёжно и просто, без побочных эффектов, и для мало изменяемой таблицы будет идеальным решением.
2 дек 16, 09:56    [19958458]     Ответить | Цитировать Сообщить модератору
 Re: обновление поля в котором хранится время последней редакции записи, как правильнее?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Оптимально обновлять данные записи с помощью процедуры. В этом случае клиент работает с интерфейсом, а не с данными.
2 дек 16, 12:44    [19959264]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить