Pourquoi les SEQUENCES MS SQL Server n'ont-elles pas de paramètre ORDER comme Oracle?

9

Dans la documentation de CREATE SEQUENCEpour T-SQL , vous pouvez voir que la CREATE SEQUENCEcommande n'a pas de ORDERparamètre.

À titre de comparaison, les documents Oracle pourCREATE SEQUENCE afficher les options ORDER/ NOORDER:

ORDER

Spécifiez ORDERpour garantir que les numéros de séquence sont générés dans l'ordre de la demande. Cette clause est utile si vous utilisez les numéros de séquence comme horodatages. La garantie de l'ordre n'est généralement pas importante pour les séquences utilisées pour générer des clés primaires.

ORDERn'est nécessaire que pour garantir la génération ordonnée si vous utilisez Oracle Database avec Real Application Clusters. Si vous utilisez le mode exclusif, les numéros de séquence sont toujours générés dans l'ordre.

NOORDER

Indiquez NOORDERsi vous ne souhaitez pas garantir que les numéros de séquence sont générés par ordre de demande. C'est la valeur par défaut.

Microsoft SQL Server fournit-il une forte contrainte de classement pour SEQUENCEs? Ou Microsoft ne le considère-t-il pas important en général?

Daniel Gray
la source
2
Avec Oracle, cela n'a généralement de sens qu'avec un RAC - pour autant que je sache, il n'y a rien d'équivalent à un RAC dans SQL Server. Pourquoi pensez-vous en avoir besoin?
a_horse_with_no_name
Je fais juste un programme compatible avec SQL Server. Cela crée des séquences, et dans les CREATE SEQUENCEinstructions, je suis tombé sur le paramètre ORDER, et je voulais juste être sûr que ce ne serait pas un problème (je ne sais pas exactement pourquoi l'a ORDERété ajouté en premier lieu alors j'ai pensé que je pourrait demander au cas où).
Daniel Gray

Réponses:

12

Dans SQL Server, tous les numéros de séquence sont générés sur une seule instance, ils sont donc intrinsèquement ordonnés. Et si vous les utilisez simplement comme des numéros uniques, cela ne devrait pas vraiment avoir d'importance de toute façon.

L'implémentation Oracle est différente car dans un environnement RAC (pas toutes les implémentations Oracle), deux numéros de séquence peuvent être générés par deux «instances» différentes (ce n'est pas le bon terme pour Oracle, mais juste l'équivalence de dessin dans SQL Server). Normalement, cela ne vous dérangerait pas si celle demandée en premier était plus lente et obtenait un nombre plus élevé que celui demandé plus tard - à moins que, comme le disent les documents Oracle, vous utilisiez les séquences comme horodatages pour refléter vraiment l'ordre de la demande d'origine.

Aaron Bertrand
la source