упорядочить результаты по столбцу типа уникального идентификатора.это надежно для моего сценария? - PullRequest
0 голосов
/ 28 января 2011

У меня есть таблица со столбцом идентификатора типа uniqueidentifier.Этот столбец тоже PK.Этот столбец имеет значение по умолчанию NewSequentialID (), однако большую часть времени он заполняется функцией NewID ().В этой таблице есть еще один столбец типа datetime.Мне нужно упорядочить результаты из этой таблицы по столбцу datetime, но если значение datetime такое же, мне нужно получить данные в том же порядке, в каком они были вставлены в эту таблицу (то есть строка, которая была вставлена ​​первой, должна отображаться первой).Если я сначала упорядочу свой результат по дате, а затем по столбцу Id, даст ли он то, что мне нужно?

Я знаю, что могут быть лучшие подходы (например, иметь некоторый столбец типа int с идентификатором или что-то еще, а не полагаться на uniqueidentifier), но эта вещь уже в производстве, и мне нужна эта сортировка только для некоторых отчетов.

Ответы [ 3 ]

2 голосов
/ 28 января 2011

Нет, это не надежно. Из документации :

Создает GUID, который больше, чем любой GUID, ранее созданный этой функцией на указанном компьютере с момента запуска Windows . После перезапуска Windows GUID может начаться снова с более низкого диапазона, но все еще остается глобально уникальным.

Вероятно, это будет работать большую часть времени, но если ваш сервер когда-либо перезагружался (и, вероятно, он имел место, если вы устанавливаете обновления для системы безопасности), то вы можете столкнуться с проблемами. С другой стороны, маловероятно, что будет одновременно вставлено две строки, когда сервер был перезапущен, так что вы можете сойти с рук ... но я бы настоятельно рекомендовал изменить вашу модель данных.

1 голос
/ 28 января 2011

Нет.GUID не обязательно будет назначен в порядке вставки.Проблема в том, что если ваша таблица не записывает порядок вставки, вы не можете ожидать воспроизведения этого порядка.

0 голосов
/ 28 января 2011

Значение метки времени - самый верный способ упорядочить строки в той последовательности, в которой они были вставлены. Вы можете проверить, имеет ли несколько строк одну и ту же метку времени:

            .... group by mytimestamp having count(*) > 1

Я никогда не сталкивался с такой ситуацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...