Las vistas de SQL Server son muy útiles para utilizar consultas complicadas como si se trataran de simples tablas. Entre sus limitaciones, sin embargo, hay una que resulta bastante irritante: no se pueden ordenar. Es decir no se puede utilizar la cláusula ORDER BY en la sentencia SQL que define la vista.
Este truco permite saltarse las normas a la torera y utilizar ordenaciones de todos modos en las vistas. Y es que según la documentación la cláusula TOP de SQL Server, con ella siempre se puede usar con ORDER BY. Este "siempre" incluye también a las vistas, pues no le queda más remedio o la mayor parte de las cláusulas TOP no tendrían sentido sin ordenación.
TOP sirve para obtener los 'x' primeros resultados de una consulta. Por ejemplo, si quiero obtener los últimos 1.000 registros de facturas de una tabla puedo escribir:
SELECT TOP 1000 * FROM Facturas ORDER BY NumFact DESC
Lo que alguna gente no sabe es que TOP admite una sintaxis alternativa que permite especificar un porcentaje de filas a devolver en lugar de un número absoluto. Esta es la cuestión que nos interesa ya que entonces basta con escribir:
CREATE VIEW FacturasAlReves
AS
SELECT TOP 100 PERCENT * FROM Facturas ORDER BY NumFact DESC
GO
para crear una vista de la tabla facturas que contiene todos sus registros ordenados en sentido inverso al normal.
Este es un ejemplo muy simple, pero lo que se pretende ilustrar es la técnica que permite saltarse la restricción de orden de las vistas, que es usar TOP para obtener el 100% de los registros.