web-dev-qa-db-fra.com

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

Dans la documentation de CREATE SEQUENCE Pour T-SQL , vous pouvez voir que la commande CREATE SEQUENCE N'a pas de paramètre ORDER.

À titre de comparaison, les documents Oracle pour CREATE SEQUENCE affichent les options ORDER/NOORDER:

ORDER

Spécifiez ORDER pour 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.

ORDER n'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

Spécifiez NOORDER si vous ne souhaitez pas garantir que les numéros de séquence sont générés dans l'ordre de la 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?

9
Daniel Gray

Dans SQL Server, tous les numéros de séquence sont générés sur une seule instance, ils sont donc déjà 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, vous ne vous soucieriez 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.

12
Aaron Bertrand