¿Por qué las SECUENCIAS de MS SQL Server no tienen un parámetro ORDER como Oracle?

9

En la documentación de CREATE SEQUENCEpara T-SQL , puede ver que el CREATE SEQUENCEcomando no tiene ningún ORDERparámetro.

A modo de comparación, los documentos de Oracle paraCREATE SEQUENCE mostrar las opciones ORDER/ NOORDER:

ORDER

Especifique ORDERpara garantizar que los números de secuencia se generan en orden de solicitud. Esta cláusula es útil si está utilizando los números de secuencia como marcas de tiempo. Garantizar el orden generalmente no es importante para las secuencias utilizadas para generar claves primarias.

ORDERsolo es necesario para garantizar la generación ordenada si está utilizando Oracle Database con Real Application Clusters. Si está utilizando el modo exclusivo, los números de secuencia siempre se generan en orden.

NOORDER

Especifique NOORDERsi no desea garantizar que los números de secuencia se generen en orden de solicitud. Este es el valor predeterminado.

¿Microsoft SQL Server proporciona una fuerte restricción de orden para SEQUENCEs? ¿O Microsoft no lo considera importante en general?

Daniel Gray
fuente
2
Con Oracle, esto generalmente solo tiene sentido con un RAC, por lo que sé, no hay nada equivalente a un RAC en SQL Server. ¿Por qué crees que lo necesitas?
a_horse_with_no_name
Solo estoy haciendo un programa compatible con SQL Server. Crea algunas secuencias, y en las CREATE SEQUENCEdeclaraciones, me encontré con el parámetro ORDER, y solo quería estar seguro de que no sería un problema (no estoy seguro de por qué ORDERse agregó exactamente en primer lugar, así que pensé que podría preguntar por si acaso).
Daniel Gray

Respuestas:

12

En SQL Server, todos los números de secuencia se generan en una sola instancia, por lo que ya están inherentemente ordenados. Y si solo los usa como números únicos, no debería importar de todos modos.

La implementación de Oracle es diferente porque en un entorno RAC (no todas las implementaciones de Oracle), dos números de secuencia podrían generarse por dos "instancias" diferentes (ese es el término incorrecto para Oracle, pero solo equivale a la equivalencia en SQL Server). Normalmente no le importaría si el pedido primero fue más lento y obtuvo un número más alto que el solicitado después, a menos que, como dicen los documentos de Oracle, estuviera usando las secuencias como marcas de tiempo para reflejar realmente el orden de la solicitud original.

Aaron Bertrand
fuente