Compartir a través de


Limitar los conjuntos de resultados con TOP y PERCENT

Puede utilizar la cláusula TOP para limitar el número de filas devueltas en el conjunto de resultados.

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

expression es una expresión numérica que especifica el número de filas que se van a devolver, o si se especifica PERCENT, el porcentaje (especificado por expression) de las filas del conjunto de resultados que se van a devolver. Por ejemplo:

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

Si una instrucción SELECT que incluya TOP tiene también una cláusula ORDER BY, las filas que se van a devolver se seleccionan del conjunto de resultados ordenado. El conjunto completo de resultados se genera en el orden especificado y se devuelven las n filas superiores del conjunto de resultados ordenado. Si también se especifica WITH TIES, se devuelven todas las filas que contienen el último valor devuelto por la cláusula ORDER BY, aunque al hacerlo se supere el número especificado por expression.

TOP frente a SET ROWCOUNT

El otro método utilizado para limitar el tamaño de un conjunto de resultados consiste en ejecutar una instrucción SET ROWCOUNT n antes de ejecutar otra instrucción. SET ROWCOUNT difiere de TOP en los siguientes aspectos:

  • El límite SET ROWCOUNT se aplica a la construcción de filas del conjunto de resultados después de que se evalúe una instrucción ORDER BY. Cuando se especifica ORDER BY, la instrucción SELECT se termina cuando se hayan seleccionado n filas de un conjunto de valores que se han ordenado según la clasificación ORDER BY especificada.
  • La cláusula TOP se aplica a la única instrucción SELECT en que se especifica. SET ROWCOUNT permanece activada hasta que se ejecuta otra instrucción SET ROWCOUNT, como, por ejemplo, SET ROWCOUNT 0 para desactivar la opción.
    ms187043.note(es-es,SQL.90).gifImportante:
    La utilización de SET ROWCOUNT no afectará a las instrucciones DELETE, INSERT ni UPDATE en la próxima versión de SQL Server. Evite utilizar SET ROWCOUNT con las instrucciones DELETE, INSERT y UPDATE en los nuevos trabajos de desarrollo, y modifique las aplicaciones que la utilizan en la actualidad. Recomendamos que las instrucciones DELETE, INSERT y UPDATE que actualmente utilizan SET ROWCOUNT se vuelvan a escribir para utilizar TOP.
    Aunque el efecto de SET ROWCOUNT en las instrucciones SELECT permanece invariable, es preferible usar TOP con SELECT antes que SET ROWCOUNT por los siguientes motivos: - SET ROWCOUNT hace que la mayoría de instrucciones SELECT, INSERT, UPDATE y DELETE se detengan cuando ya han alcanzado el número de filas especificado. Este comportamiento también se aplica para la activación de los desencadenadores. - Como parte de una instrucción SELECT, el optimizador de consultas puede utilizar el valor de *expression* en la cláusula TOP como parte del proceso de generación de un plan de ejecución de una consulta. Puesto que SET ROWCOUNT se utiliza fuera de una instrucción que ejecuta una consulta, su valor no se puede utilizar para generar un plan de consultas para la consulta.

Vea también

Otros recursos

TOP (Transact-SQL)
SELECT (Transact-SQL)
SET ROWCOUNT (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005