Dlaczego sekwencje MS SQL Server nie mają parametru ORDER takiego jak Oracle?

9

W dokumentacji CREATE SEQUENCET-SQL widać, że CREATE SEQUENCEpolecenie nie ma ORDERparametru.

Dla porównania dokumentacja Oracle dlaCREATE SEQUENCE show the ORDER/ NOORDERoptions:

ORDER

Określ, ORDERaby zagwarantować, że numery sekwencyjne będą generowane w kolejności żądań. Ta klauzula jest przydatna, jeśli używasz numerów sekwencyjnych jako znaczników czasu. Kolejność gwarantowana zwykle nie jest ważna dla sekwencji używanych do generowania kluczy podstawowych.

ORDERjest konieczne tylko w celu zagwarantowania uporządkowanego generowania, jeśli korzystasz z bazy danych Oracle z Real Application Clusters. Jeśli korzystasz z trybu wyłączności, numery sekwencyjne są zawsze generowane w kolejności.

NOORDER

Określ NOORDER, czy nie chcesz gwarantować, że numery sekwencyjne będą generowane w kolejności żądania. To jest domyślne.

Czy Microsoft SQL Server zapewnia silne ograniczenie dla SEQUENCEs? Czy też Microsoft nie uważa tego za ogólnie ważne?

Daniel Gray
źródło
2
W przypadku Oracle zwykle ma to sens tylko z RAC - o ile wiem, nie ma nic równoważnego z RAC w SQL Server. Jak myślisz, dlaczego tego potrzebujesz?
a_horse_w_no_name
Właśnie robię program kompatybilny z SQL Server. Tworzy sekwencje, a w CREATE SEQUENCEinstrukcjach natrafiłem na parametr ZAMÓWIENIE, a chciałem tylko mieć pewność, że nie będzie to problemem (nie jestem pewien, dlaczego dokładnie ORDERzostał dodany, więc pomyślałem, że może zapytać na wszelki wypadek).
Daniel Gray

Odpowiedzi:

12

W SQL Server wszystkie numery sekwencyjne są generowane w jednym wystąpieniu, więc są już z natury uporządkowane. A jeśli używasz ich tylko jako unikalnych liczb, to i tak nie powinno mieć znaczenia.

Implementacja Oracle jest inna, ponieważ w środowisku RAC (nie wszystkie implementacje Oracle) dwie liczby „sekwencji” mogą zostać wygenerowane przez dwa różne „wystąpienia” (to zły termin dla Oracle, ale po prostu rysowanie równoważności w SQL Server). Zwykle nie przejmowałbyś się tym, że ten, o który najpierw poprosiłeś, był wolniejszy i uzyskał wyższy numer niż ten, o który poprosiłeś później - chyba że, jak mówią doktorzy Oracle, używałeś sekwencji jako znaczników czasu, aby naprawdę odzwierciedlać kolejność pierwotnego żądania.

Aaron Bertrand
źródło