Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=a8e1889f-c370-47b9-9885-c09a65de2301

TRUCO: Cómo ordenar las vistas de SQL Server

SQL-Lenguaje

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.

Fecha de publicación:
campusMVP campusMVP es la mejor forma de aprender a programar online y en español. En nuestros cursos solamente encontrarás contenidos propios de alta calidad (teoría+vídeos+prácticas) creados y tutelados por los principales expertos del sector. Nosotros vamos mucho más allá de una simple colección de vídeos colgados en Internet porque nuestro principal objetivo es que tú aprendas. Ver todos los posts de campusMVP
Archivado en: Desarrollo Web | Trucos

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (10) -

Alejandro Linares
Alejandro Linares

Agradezco este comments es justo lo que buscaba

Responder

Buenas,

Y esto de usar el truco del 100% del TOP no tiene algún tiempo de penalización sobre el rendimiendo de la consulta SQL. Lo digo por simplemente tenerlo en cuenta.

Saludos.

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola Jesús:

Dependerá mucho de tu consulta, pero en muchos casos es probable que incluso pueda mejorar el rendimiento. Lo tendrás que ver con la ayuda del analizador de consultas, que te dirá claramente cuál es el impacto.

Saludos.

Responder

Hola José Manuel,

Pues si imagino que dependerá de la consulta, pero imaginaba que añadir un top y un order, penalizarían siempre, claro esta que como lo pones en una vista es posible que mejore el plan de ejecución respecto a la consulta original, que realmente es un tema de poder ordenar la vista, que de otra manera no podrias hacer.

En cualquier caso parece que como dices lo tendré que ver con el profiler.

Gracias por las aclaraciones.

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola de nuevo Jesús:

Yo no soy especialista en rendimiento de SQL Server (tenemos, por cierto, un seminario bueno sobre el tema de alguien que sí lo es: /catalogo/Product-Seminario-Optimizaci%C3%B3n-de-consultas-e-%C3%ADndices-en-SQL-Server_214.aspx) pero la cláusula TOP no siempre penaliza el rendimiento. Más bien al contrario: en ocasiones puede mejorar el rendimiento al limitar la cantidad de registros que devuelve y sobre los que se debe operar. Por ejemplo, si tu consulta realiza cálculos o subconsultas con cada uno de los registros o usa funciones tabulares, de hecho puede suponer una gran mejora en rendimiento. En otros casos puede añadir penalización, pero dependiendo de la consulta puede ser mínima o muy elevada.

Por eso digo lo de ver cada caso concreto y su impacto.

Saludos!

Responder

Pero parece que esto no funciona bien con funciones que retornan una tabla (el uso de TOP 100 PERCENT  para el ORDER BY me refiero)....al parecer no da errores de sintaxis, pero no realiza ordenamiento por ejemplo un campo datetime...

Responder

Hola Cynthia,

Hay casos que la sentencia con el Top 100% no ordena la vista, como en la FECHA (datetime).
Poniendo 99.999999 en lugar de 100 se corrige.

Saludos,

http://esfot.epn.edu.ec/

http://www.epn.edu.ec/

Responder

Ariel Quispe
Ariel Quispe

Muchas gracias por la aclaración, efectivamente se corrige el asunto al ordenar por fechas, saludos.

Responder

Rafael Cano Palomino
Rafael Cano Palomino

¿Porqué no se crea un índice y listo?

Un saludo Rafael Cano
Jaén - España
Córdoba - España

Responder

Andrea Guillaume
Andrea Guillaume

Muchas Gracias! este tuco me resulta muy útil.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.