Почему у SEQUENCEs MS SQL Server нет параметра ORDER, как у Oracle?

9

В документации CREATE SEQUENCEпо T-SQL видно, что CREATE SEQUENCEкоманда не имеет ORDERпараметров.

Для сравнения, документы Oracle дляCREATE SEQUENCE показа параметров ORDER/ NOORDER:

ORDER

Укажите, ORDERчтобы гарантировать, что порядковые номера генерируются в порядке запроса. Это предложение полезно, если вы используете порядковые номера в качестве меток времени. Гарантирующий порядок обычно не важен для последовательностей, используемых для генерации первичных ключей.

ORDERнеобходимо только для гарантии упорядоченной генерации, если вы используете Oracle Database с Real Application Clusters. Если вы используете эксклюзивный режим, порядковые номера всегда генерируются по порядку.

NOORDER

Укажите, NOORDERесли вы не хотите гарантировать, что порядковые номера генерируются в порядке запроса. Это по умолчанию.

Предоставляет ли Microsoft SQL Server строгие ограничения на порядок для SEQUENCEs? Или Microsoft не считает это важным в целом?

Дэниел Грей
источник
2
С Oracle это обычно имеет смысл только с RAC - насколько я знаю, в SQL Server нет ничего эквивалентного RAC. Почему вы думаете, что это нужно?
a_horse_with_no_name
Я просто делаю программу, совместимую с SQL Server. Он создает некоторые последовательности, и в CREATE SEQUENCEинструкциях я столкнулся с параметром ORDER, и я просто хотел быть уверен, что это не будет проблемой (я не уверен, почему именно ORDERбыл добавлен в первую очередь, поэтому я подумал, что может спросить на всякий случай).
Даниэль Грей

Ответы:

12

В SQL Server все порядковые номера генерируются в одном экземпляре, поэтому они уже изначально упорядочены. И если вы просто используете их как уникальные числа, это не должно иметь никакого значения.

Реализация Oracle отличается тем, что в среде RAC (не во всех реализациях Oracle) два порядковых номера могут быть сгенерированы двумя разными «экземплярами» (это неправильный термин для Oracle, но просто вывод эквивалентности в SQL Server). Обычно вам было бы все равно, если запрашиваемый сначала был медленнее и получал большее число, чем запрашиваемый позже - если, как говорят в документации Oracle, вы не использовали последовательности в качестве временных меток, чтобы действительно отражать порядок исходного запроса.

Аарон Бертран
источник