Можно ли получить одинаковый результат SYSDATETIME для 2 транзакций? - PullRequest
0 голосов
/ 03 июня 2019

Согласно документации, точность функции SYSDATETIME () на сервере sql составляет приблизительно 100 наносекунд. Я видел, что так же, как GETDATE (), функция SYSDATETIME также возвращает тот же результат в транзакции. Кроме того, время отличается в двух пакетах, разделенных GO. Теперь мой реальный вопрос: можно ли предположить, что две транзакции всегда будут иметь разный SYSDATETIME, независимо от того, насколько близки они к параллелизму, которого они могут достичь в одном и том же экземпляре сервера / базы данных, независимо от количества ядер / оборудования на сервере? Справочная информация: я пытаюсь реализовать аудит в существующей базе данных с использованием временных таблиц. Мы уже храним измененный столбец во всех таблицах. Но мы не можем определить, кто удалил запись, используя временные таблицы. Поэтому я думал о том, чтобы сбросить идентификатор пользователя (идентификатор конечного пользователя) в таблицу для всех транзакций. Так что, если время совпадает с временной таблицей, я могу определить пользователя по дате и времени.

1 Ответ

1 голос
/ 03 июня 2019

Сначала я должен сообщить вам, что GETDATE() и SYSDATETIME дают различный формат даты и времени. SYSDATETIME() даст вам следующий результат - 2019-06-03 16:11:07.3683245 и GETDATE() - - 2019-06-03 16:11:07.367. Теперь вам нужно добавить два столбца в таблицу, для которых пользователь обновил записи и в какое время. И если вы не используете какой-либо трудоемкий процесс между обновлением временной таблицы и обновлением основной таблицы, тогда он получит одинаковое время. Но если по какой-либо причине потребуется время, чтобы обновить обе записи, то это может быть разное время в обеих таблицах.

Вы можете использовать метод Declare в sql, чтобы иметь одинаковые datetime в обеих таблицах. Нет проблем, когда он будет обновляться в разное время. Вы можете использовать Declare метод, чтобы получить datetime так же, как и следуйте.

Declare @date Datetime2 = SYSDATETIME()
Select @Date

Вы можете использовать @Date при обновлении datetime в запросе.

Надеюсь, это сработает.

...