Точное обновление столбца LastUpdatedOn datetime2 в SQL Server
Я хочу обновить LastUpdatedOn datetime2
столбец каждый раз, когда строка обновляется в таблице SQL Server. Чтобы достичь этого, я думал об использовании After Update
триггер, чтобы установить LastUpdatedOn
в sysutcdatetime()
, Этот триггер также отвечает за обнаружение изменений столбцов и сохранение старых значений в таблице истории. Мой вопрос заключается в том, сохранит ли подход триггера точное представление времени обновления строки? Есть ли задержка между фактическим обновлением и After Update
вызвать обновление LastUpdatedOn
?
Также, читая http://technet.microsoft.com/en-us/library/bb630387.aspx, это выглядит так GetSystemTimeAsFileTime()
может быть неточным на нескольких серверах. В архитектуре изолированной базы данных с большим количеством одновременных записей, какой самый надежный способ определения времени события, чтобы я знал, что порядок событий во всем кластере является правильным?
PS я думал об использовании Change Data Capture
, но это не доступно в SQL Azure.
1 ответ
Может возникнуть задержка, в зависимости от того, сколько строк вы обновляете в одном операторе, и от того, сколько журналов оно занимает, потому что триггер срабатывает в самом конце. Я бы порекомендовал обновить время внутри фактического заявления об обновлении.
Кроме того, используйте предложение output для перемещения данных в таблицу истории.