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.
Convenciones de sintaxis de Transact-SQL
Sintaxis
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
Argumentos
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.[!NOTA] El orden devuelto de los registros en lazados es arbitrario. SORT BY no afecta a esta regla.
Notas
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.
Ejemplos
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;
Vea también
Referencia
SELECT (Transact-SQL)
INSERT (Transact-SQL)
UPDATE (Transact-SQL)
DELETE (Transact-SQL)
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
17 de noviembre de 2008 |
|
5 de diciembre de 2005 |
|