Warum haben MS SQL Server SEQUENCEs keinen ORDER-Parameter wie Oracle?

9

In der Dokumentation zu CREATE SEQUENCEfor T-SQL sehen Sie, dass der CREATE SEQUENCEBefehl keinen ORDERParameter hat.

Zum Vergleich zeigen die Oracle-DokumenteCREATE SEQUENCE die Optionen ORDER/ an NOORDER:

ORDER

Geben Sie ORDERan, um sicherzustellen , dass Sequenznummern in der Reihenfolge der Anforderung generiert werden. Diese Klausel ist nützlich, wenn Sie die Folgenummern als Zeitstempel verwenden. Die Garantie der Reihenfolge ist normalerweise nicht wichtig für Sequenzen, die zum Generieren von Primärschlüsseln verwendet werden.

ORDERDies ist nur erforderlich, um die geordnete Generierung zu gewährleisten, wenn Sie Oracle Database mit Real Application Clusters verwenden. Wenn Sie den exklusiven Modus verwenden, werden Sequenznummern immer in der richtigen Reihenfolge generiert.

NOORDER

Geben NOORDERSie an, ob Sie nicht garantieren möchten, dass Sequenznummern in der Reihenfolge der Anforderung generiert werden. Dies ist die Standardeinstellung.

Bietet Microsoft SQL Server eine starke Bestellbeschränkung für SEQUENCEs? Oder hält Microsoft es im Allgemeinen nicht für wichtig?

Daniel Gray
quelle
2
Bei Oracle ist dies normalerweise nur bei einem RAC sinnvoll - soweit ich weiß, gibt es in SQL Server nichts, was einem RAC entspricht. Warum denkst du, brauchst du es?
a_horse_with_no_name
Ich mache gerade ein Programm kompatibel mit SQL Server. Es werden einige Sequenzen erstellt, und in den CREATE SEQUENCEAnweisungen bin ich auf den Parameter ORDER gestoßen, und ich wollte nur sichergehen, dass dies kein Problem darstellt (ich bin mir nicht sicher, warum das überhaupt ORDERhinzugefügt wurde, also dachte ich, ich könnte nur für den Fall fragen).
Daniel Gray

Antworten:

12

In SQL Server werden alle Sequenznummern auf einer einzelnen Instanz generiert, sodass sie bereits inhärent geordnet sind. Und wenn Sie sie nur als eindeutige Zahlen verwenden, sollte das sowieso keine Rolle spielen.

Die Oracle-Implementierung ist unterschiedlich, da in einer RAC-Umgebung (nicht bei allen Oracle-Implementierungen) zwei Sequenznummern von zwei verschiedenen „Instanzen“ generiert werden können (dies ist der falsche Begriff für Oracle, aber nur die Äquivalenz in SQL Server). Normalerweise ist es Ihnen egal, ob die zuerst angeforderte langsamer ist und eine höhere Nummer als die später angeforderte hat - es sei denn, Sie verwenden die Sequenzen, wie in den Oracle-Dokumenten angegeben, als Zeitstempel, um die Reihenfolge der ursprünglichen Anforderung wirklich widerzuspiegeln.

Aaron Bertrand
quelle