TOP (Transact-SQL)

Actualizado: 17 de noviembre de 2008

Especifica que sólo se devolverá el primer conjunto de filas del resultado de la consulta. El conjunto de filas puede ser un número o un porcentaje de las filas. La expresión TOP se puede utilizar en instrucciones SELECT, INSERT, UPDATE y DELETE.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


[ 
     TOP (expression) [PERCENT]
     [ WITH TIES ]
]

expression

Es la expresión numérica que especifica el número de filas que se devolverán. El valor expression se convierte implícitamente a un valor float si se especificó PERCENT; de lo contrario, se convierte a bigint.

En instrucciones INSERT, UPDATE y DELETE, se requieren paréntesis que delimiten el valor expression en TOP. Por compatibilidad con versiones anteriores se admite TOP expression sin paréntesis en instrucciones SELECT, pero no se recomienda usar esto.

Si la consulta contiene una cláusula ORDER BY, se devolverán las primeras filas de expression o el porcentaje de filas de expression ordenadas por la cláusula ORDER BY. Cuando la consulta no tiene una cláusula ORDER BY, el orden de las filas es arbitrario.

PERCENT

Indica que la consulta devuelve sólo el primer porcentaje de filas de expression del conjunto de resultados.

WITH TIES

Especifica que las filas adicionales se devolverán del conjunto de resultados base con el mismo valor en las columnas ORDER BY que el que aparece en la última de las filas de TOP n (PERCENT). TOP...WITH TIES sólo se puede especificar en instrucciones SELECT y siempre que haya una cláusula ORDER BY especificada.

ms189463.note(es-es,SQL.90).gifNota:
El orden devuelto de los registros en lazados es arbitrario. SORT BY no afecta a esta regla.

TOP no se puede utilizar conjuntamente con instrucciones UPDATE y DELETE en vistas con particiones.

Las filas a las que se hace referencia en la expresión TOP utilizada con INSERT, UPDATE o DELETE no se organizan en ningún orden. TOP n devuelve n filas aleatorias. Por ejemplo, la siguiente instrucción de INSERT contiene la cláusula ORDER BY y aún así esta cláusula no afecta a las filas a las que se hace referencia directamente en la instrucción INSERT.

INSERT TOP (2) INTO Table2 (ColumnB) 
     SELECT ColumnA FROM Table1 
     ORDER BY ColumnA

La cláusula ORDER BY de la consulta anterior sólo hace referencia a las filas devueltas por la instrucción SELECT anidada. La instrucción INSERT elige cualquiera de las dos filas devueltas por la instrucción SELECT. Para garantizar que se hayan insertado las dos filas superiores de la subconsulta SELECT, vuelva a escribir la consulta de la manera siguiente.

INSERT INTO Table2 (ColumnB) 
     SELECT TOP (2) ColumnA FROM Table1 
     ORDER BY ColumnA

Microsoft SQL Server 2005 permite la actualización de vistas creadas con la cláusula TOP. Dado que la cláusula TOP se incluye en la definición de vista, es posible que algunas filas puedan desaparecer de la vista a causa de una actualización, si el resultado ya no cumple con los requisitos de la expresión TOP. Para obtener más información, vea Modificar datos mediante una vista.

La expresión TOP de una consulta no afecta a las instrucciones que se pueden ejecutar a partir de la activación de un desencadenador. Las tablas insertadas y actualizadas en los desencadenadores sólo mostrarán las filas verdaderamente afectadas por las instrucciones INSERT, UPDATE o DELETE.

A. Usar TOP con variables

En el ejemplo siguiente se utiliza una variable para obtener los 10 primeros empleados enumerados en la tabla dbo.Employee de la base de datos AdventureWorks.

USE AdventureWorks ;
GO
DECLARE @p AS int
SET @p='10'
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO

B. Usar TOP con PERCENT y WITH TIES

En el ejemplo siguiente se obtiene el 10% de los empleados que tienen los salarios más altos y los devuelve en orden descendente de acuerdo con el salario base. La especificación de WITH TIES garantiza que también se incluyan los empleados con salarios iguales al salario más bajo en el conjunto de resultados, aun cuando esto supere el 10% de los empleados.

USE AdventureWorks ;
GO
SELECT TOP(10) PERCENT WITH TIES
c.FirstName, c.LastName, e.Title, e.Gender, r.Rate
FROM Person.Contact c 
INNER JOIN HumanResources.Employee e
ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeePayHistory r
ON r.EmployeeID = e.EmployeeID
ORDER BY Rate DESC;

Versión Historial

17 de noviembre de 2008

Contenido modificado:
  • Se agregó una nota a la descripción del argumento WITH TIES.

5 de diciembre de 2005

Contenido modificado:
  • Se actualizó el ejemplo B.

Adiciones de comunidad

AGREGAR
Mostrar: