Триггеры и вставка записей

Константин Туманов
Дата: 21.01.2009 16:36:57
Уважаемые господа!

Прошу поделиться мнениями по поводу решения следующей проблемы.



Для нескольких таблиц базы данных (БД) SQL Server 2000 установлены триггеры "AFTER INSERT", вставляющие записи в таблицу [Обновление] этой же БД (протоколирует изменения в БД для целей пользовательского приложения).

Поле [Дата] таблицы [Обновление] содержит дату и время выполнения операции (после которой активируется триггер). Триггеры заполняют это поле с помощью функции Transact-SQL GETDATE().

На практике иногда выходит так, что последовательность, в которой некоторые записи вставлены в таблицу [Обновление], противоречит значениям поля [Дата], то есть время (значение поля [Дата]) - позже, а запись в таблице [Обновление] появилась раньше.

Последовательность, в которой записи расположены в таблице [Обновление], важна для пользовательского приложения.



Что может быть причиной такого "непоследовательного срабатывания" триггеров? Может ли оказать влияние на ситуацию уровень изоляции транзакций или другие настройки SQL-сервера?





Заранее спасибо!
Glory
Дата: 21.01.2009 16:39:20
А как вы определяете порядок записей в вашей таблице [Обновление] ?
Константин Туманов
Дата: 21.01.2009 16:43:04
Возвращаю записи запросом SELECT или открываю таблицу одной из программ, например Enterprise Manager или Query Analyzer.
Glory
Дата: 21.01.2009 16:43:51
Константин Туманов
Возвращаю записи запросом SELECT или открываю таблицу одной из программ, например Enterprise Manager или Query Analyzer.

И почему вы считаете, что "SELECT или открываю таблицу " вернет вам записи в их физическом порядке ?
Константин Туманов
Дата: 21.01.2009 16:47:50
Хороший вопрос!
Могу только сказать, что последовательность каждый раз одинаковая: при выборе запросом из программы через ADO, при открытии таблицы с помощью Enterprise Manager или Query Analyzer.
Glory
Дата: 21.01.2009 16:52:02
Константин Туманов
Хороший вопрос!
Могу только сказать, что последовательность каждый раз одинаковая: при выборе запросом из программы через ADO, при открытии таблицы с помощью Enterprise Manager или Query Analyzer.

Одинаковая последовательность не есть факт отображения данных именно в их физическом порядке. Т.е. в том порядке, в каком они были добавлены в таблицу
Константин Туманов
Дата: 21.01.2009 16:58:00
А как выбрать данные "в том порядке, в каком они были добавлены в таблицу"?
Glory
Дата: 21.01.2009 16:59:14
Константин Туманов
А как выбрать данные "в том порядке, в каком они были добавлены в таблицу"?

Для этого в вашей таблице должно быть поле, куда вы(или сервер) будете заносить монотонно возрастающее значение.
Константин Туманов
Дата: 21.01.2009 17:00:50
Например, установить свойство Identity для поля?
Glory
Дата: 21.01.2009 17:01:26
Константин Туманов
Например, установить свойство Identity для поля?

например