sql >> Base de Datos >  >> RDS >> Sqlserver

Cálculo de SQL Server ROW_NUMBER() OVER() para una tabla derivada

El Row_Number() OVER (ORDER BY (SELECT 1)) truco debería NO verse como una forma de evitar cambiar el orden de los datos subyacentes. Es solo un medio para evitar que el servidor realice una ordenación adicional e innecesaria (todavía puede realizar la ordenación, pero costará la cantidad mínima posible en comparación con la ordenación por columna).

Todas las consultas en el servidor SQL ABSOLUTAMENTE DEBEN tener un ORDER BY cláusula en la consulta más externa para que los resultados se ordenen de manera confiable y garantizada.

El concepto de "mantener el orden original" no existe en las bases de datos relacionales. Las tablas y consultas siempre se deben considerar desordenadas hasta y a menos que un ORDER BY la cláusula se especifica en la consulta más externa.

Podría intentar la misma consulta desordenada 100.000 veces y recibirla siempre con el mismo orden, y así llegar a creer que puede confiar en dicho orden. Pero eso sería un error, porque un día algo cambiará y no tendrá el orden que esperas. Un ejemplo es cuando una base de datos se actualiza a una nueva versión de SQL Server; esto ha provocado que muchas consultas cambien su orden. Pero no tiene que ser un cambio tan grande. Algo tan pequeño como agregar o eliminar un índice puede causar diferencias. Y más:Instalación de un paquete de servicio. Partición de una tabla. Crear una vista indexada que incluya la tabla en cuestión. Llegar a un punto de inflexión donde se elige un escaneo en lugar de una búsqueda. Y así sucesivamente.

No confíe en que los resultados se ordenen a menos que haya dicho "Servidor, ORDER BY ".