TOP (Transact-SQL)TOP (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Limita as linhas retornadas em um conjunto de resultados de consulta a um número ou percentual de linhas no SQL Server 2019SQL Server 2019.Limits the rows returned in a query result set to a specified number of rows or percentage of rows in SQL Server 2019SQL Server 2019. Quando você usa TOP com a cláusula ORDER BY, o conjunto de resultados é limitado ao primeiro número N de linhas ordenadas.When you use TOP with the ORDER BY clause, the result set is limited to the first N number of ordered rows. Caso contrário, TOP retorna o primeiro número N de linhas em uma ordem indefinida.Otherwise, TOP returns the first N number of rows in an undefined order. Use esta cláusula para especificar o número de linhas retornadas de uma instrução SELECT.Use this clause to specify the number of rows returned from a SELECT statement. Ou então, use TOP para especificar as linhas afetadas por uma instrução INSERT, UPDATE, MERGE ou DELETE.Or, use TOP to specify the rows affected by an INSERT, UPDATE, MERGE, or DELETE statement.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

A seguir, é possível ver a sintaxe do SQL Server e do Banco de Dados SQL do Azure:Following is the syntax for SQL Server and Azure SQL Database:

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

A seguir, é possível ver a sintaxe do SQL Data Warehouse do Azure e do Parallel Data Warehouse:Following is syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

[   
    TOP ( expression )   
    [ WITH TIES ]  
]  

ArgumentosArguments

expressãoexpression
A expressão numérica que especifica o número de linhas a serem retornadas.The numeric expression that specifies the number of rows to be returned. expression será convertido implicitamente em um float se você especificar PERCENT.expression is implicitly converted to a float value if you specify PERCENT. Caso contrário, expression é convertido em bigint.Otherwise, expression is converted to bigint.

PERCENTPERCENT
Indica que a consulta retorna apenas a primeira porcentagem de linhas da expression do conjunto de resultados.Indicates that the query returns only the first expression percent of rows from the result set. Os valores fracionários são arredondados até o próximo valor inteiro.Fractional values are rounded up to the next integer value.

WITH TIESWITH TIES
Retorna duas ou mais linhas associadas ao último lugar do conjunto de resultados limitado.Returns two or more rows that tie for last place in the limited results set. Você deve usar esse argumento com a cláusula ORDER BY.You must use this argument with the ORDER BY clause. WITH TIES pode fazer com que mais linhas sejam retornadas do que o valor especificado em expression.WITH TIES might cause more rows to be returned than the value specified in expression. Por exemplo, se expression for definido como 5, mas duas linhas adicionais corresponderem aos valores das colunas ORDER BY na linha 5, o conjunto de resultados conterá sete linhas.For example, if expression is set to 5 but two additional rows match the values of the ORDER BY columns in row 5, the result set will contain seven rows.

Você poderá especificar a cláusula TOP com o argumento WITH TIES somente em instruções SELECT e somente se você também tiver especificado a cláusula ORDER BY.You can specify the TOP clause with the WITH TIES argument only in SELECT statements, and only if you've also specified the ORDER BY clause. A ordem retornada de registros vinculados é arbitrária.The returned order of tying records is arbitrary. ORDER BY não afeta essa regra.ORDER BY doesn't affect this rule.

Práticas recomendadasBest Practices

Em uma instrução SELECT, sempre use uma cláusula ORDER BY com a cláusula TOP.In a SELECT statement, always use an ORDER BY clause with the TOP clause. Porque essa é a única forma de indicar de maneira previsível as linhas que são afetadas por TOP.Because, it's the only way to predictably indicate which rows are affected by TOP.

Use OFFSET e FETCH na cláusula ORDER BY em vez da cláusula TOP implementar uma solução de paginação de consulta.Use OFFSET and FETCH in the ORDER BY clause instead of the TOP clause to implement a query paging solution. Uma solução de página (ou seja, enviar partes ou "páginas" de dados ao cliente) é mais fácil de implementar com as cláusulas OFFSET e FETCH.A paging solution (that is, sending chunks or "pages" of data to the client) is easier to implement using OFFSET and FETCH clauses. Para obter mais informações, consulte Cláusula ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

Use TOP (ou OFFSET e FETCH) em vez de SET ROWCOUNT para limitar o número de linhas retornadas.Use TOP (or OFFSET and FETCH) instead of SET ROWCOUNT to limit the number of rows returned. Esses métodos são preferenciais em relação ao uso de SET ROWCOUNT pelos seguintes motivos:These methods are preferred over using SET ROWCOUNT for the following reasons:

  • Como parte de uma instrução SELECT, o otimizador de consultas pode considerar o valor da expression nas cláusulas TOP ou FETCH durante a otimização de consultas.As a part of a SELECT statement, the query optimizer can consider the value of expression in the TOP or FETCH clauses during query optimization. Como SET ROWCOUNT é usada fora de uma instrução que executa uma consulta, seu valor não pode ser considerado em um plano de consulta.Because you use SET ROWCOUNT outside of a statement that runs a query, its value can't be considered in a query plan.

Suporte de compatibilidadeCompatibility Support

Para compatibilidade com versões anteriores, os parênteses são opcionais em instruções SELECT.For backward compatibility, the parentheses are optional in SELECT statements. É recomendável que você sempre use parênteses para TOP em instruções SELECT.We recommend that you always use parentheses for TOP in SELECT statements. Isso proporciona consistência com seu uso obrigatório em instruções INSERT, UPDATE, MERGE e DELETE.Doing so provides consistency with its required use in INSERT, UPDATE, MERGE, and DELETE statements.

InteroperabilidadeInteroperability

A expressão TOP não afeta instruções que possam ser executadas devido a um gatilho.The TOP expression doesn't affect statements that might run because of a trigger. As tabelas inserted e deleted nos gatilhos retornam somente as linhas que realmente forem afetadas pelas instruções INSERT, UPDATE, MERGE ou DELETE.The inserted and deleted tables in the triggers return only the rows that are truly affected by the INSERT, UPDATE, MERGE, or DELETE statements. Por exemplo, se um INSERT TRIGGER for acionado como resultado de uma instrução INSERT que usou uma cláusula TOP.For example, if an INSERT TRIGGER fires as the result of an INSERT statement that used a TOP clause.

O SQL ServerSQL Server permite a atualização de linhas através de exibições.SQL ServerSQL Server allows for updating rows through views. Como a cláusula TOP pode ser incluída na definição de exibição, algumas linhas poderão desaparecer da exibição se as linhas deixarem de atender aos requisitos da expressão TOP devido a uma atualização.Because you can include the TOP clause in the view definition, certain rows may disappear from the view if the rows no longer meet the requirements of the TOP expression due to an update.

Quando especificado na instrução MERGE, a cláusula TOP é aplicável depois de a tabela de origem inteira e a tabela de destino inteira serem unidas.When specified in the MERGE statement, the TOP clause applies after the entire source table and the entire target table are joined. E as linhas unidas que não se qualificam para uma ação de inserção, atualização ou exclusão são removidas.And, the joined rows that don't qualify for an insert, update, or delete action are removed. A cláusula TOP ainda reduz o número de linhas unidas para o valor especificado e as ações de inserção, atualização ou exclusão são aplicadas às linhas unidas restantes de uma forma não ordenada.The TOP clause further reduces the number of joined rows to the specified value and the insert, update, or delete actions apply to the remaining joined rows in an unordered way. Ou seja, não há ordem na qual as linhas são distribuídas entre as ações definidas nas cláusulas WHEN.That is, there's no order in which the rows are distributed among the actions defined in the WHEN clauses. Por exemplo, se a especificação de TOP (10) afeta 10 linhas, dessas linhas, sete podem ser atualizadas e três inseridas.For example, if specifying TOP (10) affects 10 rows, of these rows, seven may be updated and three inserted. Ou, uma pode ser excluída, cinco atualizadas e quatro inseridas e assim por diante.Or, one may be deleted, five updated, and four inserted, and so on. Como a instrução MERGE executa uma verificação completa das tabelas de origem e de destino, o desempenho de E/S pode ser afetado ao usar a cláusula TOP para modificar uma tabela grande criando vários lotes.Because the MERGE statement does a full table scan of both the source and target tables, I/O performance can be affected when you use the TOP clause to modify a large table by creating multiple batches. Nesse cenário, é importante garantir que todos os lotes sucessivos se destinem a novas linhas.In this scenario, it's important to ensure that all successive batches target new rows.

Tenha cautela ao especificar a cláusula TOP em uma consulta que contenha um operador UNION, UNION ALL, EXCEPT ou INTERSECT.Use caution when you're specifying the TOP clause in a query that contains a UNION, UNION ALL, EXCEPT, or INTERSECT operator. É possível gravar uma consulta que retorne resultados inesperados, pois a ordem na qual as cláusulas TOP e ORDER BY são logicamente processadas nem sempre é intuitiva quando esses operadores são usados em uma operação de seleção.It's possible to write a query that returns unexpected results because the order in which the TOP and ORDER BY clauses are logically processed isn't always intuitive when these operators are used in a select operation. Por exemplo, a partir da tabela e dos dados a seguir, suponha que você queira retornar o carro vermelho e o carro azul mais baratos.For example, given the following table and data, assume that you want to return the least expensive red car and the least expensive blue car. Isto é, o automóvel vermelho e a van azul.That is, the red sedan and the blue van.

CREATE TABLE dbo.Cars(Model varchar(15), Price money, Color varchar(10));  
INSERT dbo.Cars VALUES  
    ('sedan', 10000, 'red'), ('convertible', 15000, 'blue'),   
    ('coupe', 20000, 'red'), ('van', 8000, 'blue');  

Para obter esses resultados, você poderia gravar a consulta a seguir.To achieve these results, you might write the following query.

SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'red'  
UNION ALL  
SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'blue'  
ORDER BY Price ASC;  
GO    

O conjunto de resultados é o seguinte.Following is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
convertible   blue       15000.00

Os resultados inesperados são retornados porque a cláusula TOP é executada logicamente antes da cláusula ORDER BY, que classifica os resultados do operador (UNION ALL, neste caso).The unexpected results are returned because the TOP clause logically runs before the ORDER BY clause, which sorts the results of the operator (UNION ALL in this case). Assim, a consulta anterior retorna qualquer carro vermelho e qualquer carro azul e, em seguida, ordena o resultado dessa união pelo preço.So, the previous query returns any one red car and any one blue car and then orders the result of that union by the price. O exemplo a seguir mostra o método correto de gravar essa consulta para obter o resultado desejado.The following example shows the correct method of writing this query to achieve the desired result.

SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'red'  
      ORDER BY Price ASC) AS a  
UNION ALL  
SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'blue'  
      ORDER BY Price ASC) AS b;  
GO    

Usando TOP e ORDER BY em uma operação de subseleção, você assegura que os resultados da cláusula ORDER BY sejam aplicados à cláusula TOP e não à classificação do resultado da operação UNION.By using TOP and ORDER BY in a subselect operation, you ensure that the results of the ORDER BY clause are applied to the TOP clause and not to sorting the result of the UNION operation.

Aqui está o conjunto de resultados.Here is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
van           blue        8000.00

Limitações e RestriçõesLimitations and Restrictions

Quando você usa TOP com INSERT, UPDATE, MERGE ou DELETE, as linhas referenciadas não são organizadas em qualquer ordem.When you use TOP with INSERT, UPDATE, MERGE, or DELETE, the referenced rows aren't arranged in any order. E não é possível especificar a cláusula ORDER BY nessas instruções.And, you can't directly specify the ORDER BY clause in these statements. Se você precisar usar TOP para inserir, excluir ou modificar linhas em uma ordem cronológica significativa, use TOP junto com uma cláusula ORDER BY especificada em uma instrução de subseleção.If you need to use TOP to insert, delete, or modify rows in a meaningful chronological order, use TOP with an ORDER BY clause specified in a subselect statement. Consulte a seção Exemplos a seguir neste artigo.See the following Examples section in this article.

TOP não pode ser usado em instruções UPDATE e DELETE em exibições particionadas.You can't use TOP in an UPDATE and DELETE statements on partitioned views.

Não é possível combinar TOP com OFFSET e FETCH na mesma expressão de consulta (no mesmo escopo de consulta).You can't combine TOP with OFFSET and FETCH in the same query expression (in the same query scope). Para obter mais informações, consulte Cláusula ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

ExemplosExamples

CategoriaCategory Elementos de sintaxe em destaqueFeatured syntax elements
Sintaxe básicaBasic syntax TOP • PERCENTTOP • PERCENT
Incluindo valores de empateIncluding tie values WITH TIESWITH TIES
Limitando as linhas afetadas por DELETE, INSERT ou UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE DELETE • INSERT • UPDATEDELETE • INSERT • UPDATE

Sintaxe básicaBasic syntax

Os exemplos nesta seção demonstram a funcionalidade básica da cláusula ORDER BY usando a sintaxe mínima necessária.Examples in this section demonstrate the basic functionality of the ORDER BY clause using the minimum required syntax.

A.A. Usando TOP com um valor constanteUsing TOP with a constant value

Os exemplos a seguir usam um valor constante para especificar o número de funcionários que são retornados no conjunto de resultados da consulta.The following examples use a constant value to specify the number of employees that are returned in the query result set. No primeiro exemplo, as primeiras 10 linhas indefinidas são retornadas porque uma cláusula ORDER BY não é usada.In the first example, the first 10 undefined rows are returned because an ORDER BY clause isn't used. No segundo exemplo, uma cláusula ORDER BY é usada para retornar os 10 funcionários contratados mais recentemente.In the second example, an ORDER BY clause is used to return the top 10 recently hired employees.

USE AdventureWorks2012;  
GO  
-- Select the first 10 random employees.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee;  
GO  
-- Select the first 10 employees hired most recently.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO  

B.B. Usando TOP com uma variávelUsing TOP with a variable

O exemplo a seguir usa uma variável para especificar o número de funcionários que são retornados no conjunto de resultados da consulta.The following example uses a variable to specify the number of employees that are returned in the query result set.

USE AdventureWorks2012;  
GO  
DECLARE @p AS int = 10;  
SELECT TOP(@p)JobTitle, HireDate, VacationHours  
FROM HumanResources.Employee  
ORDER BY VacationHours DESC;  
GO  

C.C. Especificando uma porcentagemSpecifying a percentage

O exemplo a seguir usa PERCENT para especificar o número de funcionários que são retornados no conjunto de resultados da consulta.The following example uses PERCENT to specify the number of employees that are returned in the query result set. Há 290 funcionários na tabela HumanResources.Employee.There are 290 employees in the HumanResources.Employee table. Como cinco por cento de 290 é um valor fracionário, o valor é arredondado para o próximo número inteiro.Because five percent of 290 is a fractional value, the value is rounded up to the next whole number.

USE AdventureWorks2012;  
GO  
SELECT TOP(5)PERCENT JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO    

Incluindo valores de empateIncluding tie values

A.A. Usando WITH TIES para incluir linhas que correspondam aos valores da última linhaUsing WITH TIES to include rows that match the values in the last row

O exemplo a seguir obtém os primeiros 10 por cento de todos os funcionários com o salário mais alto e os retorna em ordem descendente, de acordo com seu salário.The following example gets the top 10 percent of all employees with the highest salary and returns them in descending order according to their salary. Especificar WITH TIES assegura que todos os funcionários que recebem salários iguais ao salário mais baixo retornado (a última linha) também serão incluídos no conjunto de resultados, mesmo que isso exceda 10 por cento dos funcionários.Specifying WITH TIES ensures that employees with salaries equal to the lowest salary returned (the last row) are also included in the result set, even if it exceeds 10 percent of employees.

USE AdventureWorks2012;  
GO  
SELECT TOP(10) PERCENT WITH TIES  
pp.FirstName, pp.LastName, e.JobTitle, e.Gender, r.Rate  
FROM Person.Person AS pp   
    INNER JOIN HumanResources.Employee AS e  
        ON pp.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN HumanResources.EmployeePayHistory AS r  
        ON r.BusinessEntityID = e.BusinessEntityID  
ORDER BY Rate DESC;  
GO    

Limitando as linhas afetadas por DELETE, INSERT ou UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE

A.A. Usando TOP para limitar o número de linhas excluídasUsing TOP to limit the number of rows deleted

Quando uma cláusula TOP (n) é usada com DELETE, a operação de exclusão é executada em uma seleção indefinida de um número n de linhas.When you use a TOP (n) clause with DELETE, the delete operation is done on an undefined selection of n number of rows. Ou seja, a instrução DELETE escolhe qualquer número (n) de linhas que atendem aos critérios definidos na cláusula WHERE.That is, the DELETE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. O exemplo a seguir exclui 20 linhas da tabela PurchaseOrderDetail que têm datas de conclusão anteriores a 1º de julho de 2002.The following example deletes 20 rows from the PurchaseOrderDetail table that have due dates earlier than July 1, 2002.

USE AdventureWorks2012;  
GO  
DELETE TOP (20)   
FROM Purchasing.PurchaseOrderDetail  
WHERE DueDate < '20020701';  
GO  

Se quiser usar TOP para excluir linhas em uma ordem cronológica significativa, será preciso usar TOP com ORDER BY em uma instrução de subseleção.If you want to use TOP to delete rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. A consulta a seguir exclui as 10 linhas da tabela PurchaseOrderDetail que têm as primeiras datas de vencimento.The following query deletes the 10 rows of the PurchaseOrderDetail table that have the earliest due dates. Para garantir que apenas 10 linhas sejam excluídas, a coluna especificada na instrução de subseleção (PurchaseOrderID) é a chave primária da tabela.To ensure that only 10 rows are deleted, the column specified in the subselect statement (PurchaseOrderID) is the primary key of the table. O uso de uma coluna não chave na instrução de subseleção pode resultar na exclusão de mais de 10 linhas se a coluna especificada contiver valores duplicados.Using a nonkey column in the subselect statement may result in the deletion of more than 10 rows if the specified column contains duplicate values.

USE AdventureWorks2012;  
GO  
DELETE FROM Purchasing.PurchaseOrderDetail  
WHERE PurchaseOrderDetailID IN  
   (SELECT TOP 10 PurchaseOrderDetailID   
    FROM Purchasing.PurchaseOrderDetail   
    ORDER BY DueDate ASC);  
GO  

B.B. Usando TOP para limitar o número de linhas inseridasUsing TOP to limit the number of rows inserted

O exemplo a seguir cria a tabela EmployeeSales e insere nela o nome e os dados de vendas desde o início do ano dos cinco funcionários principais da tabela HumanResources.Employee.The following example creates the table EmployeeSales and inserts the name and year-to-date sales data for the top five employees from the table HumanResources.Employee. A instrução INSERT escolhe cinco linhas retornadas pela instrução SELECT que atendam aos critérios definidos na cláusula WHERE.The INSERT statement chooses any five rows returned by the SELECT statement that meet the criteria defined in the WHERE clause. A cláusula OUTPUT exibe as linhas inseridas na tabela EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Observe que a cláusula ORDER BY na instrução SELECT não é usada para determinar os cinco funcionários principais.Notice that the ORDER BY clause in the SELECT statement isn't used to determine the top five employees.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL  
    DROP TABLE dbo.EmployeeSales;  
GO  
CREATE TABLE dbo.EmployeeSales  
( EmployeeID   nvarchar(11) NOT NULL,  
  LastName     nvarchar(20) NOT NULL,  
  FirstName    nvarchar(20) NOT NULL,  
  YearlySales  money NOT NULL  
 );  
GO  
INSERT TOP(5)INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

Se quiser usar TOP para inserir linhas em uma ordem cronológica significativa, será preciso usar TOP com ORDER BY em uma instrução de subseleção.If you want to use TOP to insert rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. O exemplo a seguir mostra como fazer isso.The following example show how to do this. A cláusula OUTPUT exibe as linhas inseridas na tabela EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Observe que os cinco funcionários principais agora são inseridos com base nos resultados da cláusula ORDER BY, em vez de linhas indefinidas.Notice that the top five employees are now inserted based on the results of the ORDER BY clause instead of undefined rows.

INSERT INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT TOP (5) sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

C.C. Usando TOP para limitar o número de linhas atualizadasUsing TOP to limit the number of rows updated

O exemplo a seguir usa a cláusula TOP para atualizar linhas em uma tabela.The following example uses the TOP clause to update rows in a table. Quando uma cláusula TOP (n) é usada com UPDATE, a operação de atualização é executada em um número indefinido de linhas.When you use a TOP (n) clause with UPDATE, the update operation runs on an undefined number of rows. Ou seja, a instrução UPDATE escolhe qualquer número (n) de linhas que atendem aos critérios definidos na cláusula WHERE.That is, the UPDATE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. O exemplo a seguir atribui 10 clientes de um vendedor para outro.The following example assigns 10 customers from one salesperson to another.

USE AdventureWorks2012;  
UPDATE TOP (10) Sales.Store  
SET SalesPersonID = 276  
WHERE SalesPersonID = 275;  
GO  

Caso seja necessário usar a cláusula TOP para aplicar atualizações em uma ordem cronológica significativa, será preciso usar TOP junto com ORDER BY em uma instrução de subseleção.If you have to use TOP to apply updates in a meaningful chronology, you must use TOP together with ORDER BY in a subselect statement. O exemplo a seguir atualiza as horas de férias dos 10 funcionários com as datas de contratação mais antigas.The following example updates the vacation hours of the 10 employees with the earliest hire dates.

UPDATE HumanResources.Employee  
SET VacationHours = VacationHours + 8  
FROM (SELECT TOP 10 BusinessEntityID FROM HumanResources.Employee  
     ORDER BY HireDate ASC) AS th  
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;  
GO  

Exemplos: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Parallel Data WarehouseParallel Data Warehouse

O exemplo a seguir retorna as primeiras 31 linhas que correspondem aos critérios de consulta.The following example returns the top 31 rows that match the query criteria. A cláusula ORDER BY garante que as 31 linhas retornadas sejam as primeiras 31 linhas com base em uma ordem alfabética da coluna LastName.The ORDER BY clause ensures that the 31 returned rows are the first 31 rows based on an alphabetical ordering of the LastName column.

Usando TOP sem especificar empates.Using TOP without specifying ties.

SELECT TOP (31) FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Resultado: 31 linhas são retornadas.Result: 31 rows are returned.

Usando TOP, especificando WITH TIES.Using TOP, specifying WITH TIES.

SELECT TOP (31) WITH TIES FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Resultado: 33 linhas são retornadas, porque três funcionários chamados Brown empatam na linha 31.Result: 33 rows are returned, because three employees named Brown tie for the 31st row.

Consulte TambémSee Also

SELECT (Transact-SQL) SELECT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
ORDER BY Clause (Transact-SQL) ORDER BY Clause (Transact-SQL)
SET ROWCOUNT (Transact-SQL) SET ROWCOUNT (Transact-SQL)
MERGE (Transact-SQL)MERGE (Transact-SQL)