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

Откуда: Дубна
Сообщений: 295
Доброго времени суток, уважаемые!

На работе начальство дало задачку. Написать триггер на апдейт и инсерт, который будет добавлять запись create_date со временем вставки или изменения записи. Сказали запихать всем таблицам такой триггер. Т.е. как я понял они хотят чтобы хранилось время каждого изменения в таблицах. База небольшая (около 1 ГБ), таблиц менее 200.

Но мне всё равно кажется это полным бредом.
Должен же быть способ вести такое логирование другими средствами, нежели добавление колонки и триггера во все таблицы!
Подскажите как это делается. Какие есть для этого инструменты. Что изучать?
14 окт 13, 10:36    [14965027]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Подскажите как это делается.

Логирование дат изменений каждой отдельной записи делается триггерами.

Просто логирование факта изменения записи делается добавлением поля rowversion

Each database has a counter that is incremented for each insert or update operation that is performed on a table that contains a rowversion column within the database. This counter is the database rowversion. This tracks a relative time within a database, not an actual time that can be associated with a clock. A table can have only one rowversion column. Every time that a row with a rowversion column is modified or inserted, the incremented database rowversion value is inserted in the rowversion column.
14 окт 13, 10:41    [14965061]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
kalimba
Member

Откуда:
Сообщений: 297
Алексей Ку.,

Если я вас правильно понял вам надо просто создать столбец create_time типа datetime/datetime2(0-3) и сделать констрейнт DEFAULT() с функциями GETDATE()/SYSDATETIME(). В SSMS это в дизайнере таблиц это поле внизу "Default value or binding". Но также можно сделать поле rowversion, как написал Glory.
14 окт 13, 10:44    [14965094]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Т.е. действительно мне надо всем таблицам добавить по две колонки:
updatetime
rowversion
Rowversion - просто счётчик. Когда запись только вставлена он равен 1. При каждом изменении строки накидывается 1, а в updatetime записывается время изменения. Я правильно понял?

Назрел ещё вопрос: Как реализовать время не глобальное, а относительное. Т.е. по этому тексту:
This tracks a relative time within a database, not an actual time that can be associated with a clock.

Потом его можно преобразовать в глобальное?
14 окт 13, 10:46    [14965107]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
При каждом изменении строки накидывается 1, а в updatetime записывается время изменения. Я правильно понял?

А кто/что будет делать "в updatetime записывается время изменения" ?

Алексей Ку.
Назрел ещё вопрос: Как реализовать время не глобальное, а относительное. Т.е. по этому тексту:
This tracks a relative time within a database, not an actual time that can be associated with a clock.

Потом его можно преобразовать в глобальное?

Никак. rowversion не имеет никакого отношения ко времени. Вообще никакого
14 окт 13, 10:47    [14965120]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
[/quot]
А кто/что будет делать "в updatetime записывается время изменения" ?
[/quot]
Тут я понял что делает это всё-таки триггер.
[/quot]
Никак. rowversion не имеет никакого отношения ко времени. Вообще никакого
[/quot]
Rowversion не имеет отношения ко времени. Он просто считает кол-во изменений строки.
В цитате с англ. источника было написано что следует вносить относительное время изменения, так?
14 окт 13, 10:54    [14965166]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
В цитате с англ. источника было написано что следует вносить относительное время изменения, так?

В цитате не написано, что нужно что-то куда-то вносить. Там написано, что rowversion обновляется автоматически.
14 окт 13, 10:59    [14965204]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Glory
Алексей Ку.
В цитате с англ. источника было написано что следует вносить относительное время изменения, так?

В цитате не написано, что нужно что-то куда-то вносить. Там написано, что rowversion обновляется автоматически.


Я попробовал rowversion.
Я создаю таблицу, вношу в неё пару строк. Почему нумерация начинается с 2043(в десятичном)? Несколько непонятно..

Значит если мне надо для каждой записи в отдельности хранить время изменения, то надоелать доп столбец с временем и триггер который будет его прописывать при добавлении/изменении.
Я правильно всё понимаю?
14 окт 13, 12:18    [14965926]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Почему нумерация начинается с 2043(в десятичном)? Несколько непонятно..

Потому что это определяет сервер, а не вы

Алексей Ку.
Значит если мне надо для каждой записи в отдельности хранить время изменения, то надоелать доп столбец с временем и триггер который будет его прописывать при добавлении/изменении.
Я правильно всё понимаю?

Для такой задачи - именно так
14 окт 13, 12:30    [14966035]     Ответить | Цитировать Сообщить модератору
 Re: Логирование  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Спасибо большое!
14 окт 13, 14:33    [14967137]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить