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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Ограничивает число строк, возвращаемых в результирующем наборе запроса до заданного числа или процентного значения в 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. Если вы используете TOP с предложением ORDER BY, в результирующий набор включаются только первые N строк отсортированного результата.When you use TOP with the ORDER BY clause, the result set is limited to the first N number of ordered rows. В противном случае TOP возвращает N строк в неопределенном порядке.Otherwise, TOP returns the first N number of rows in an undefined order. Это предложение позволяет ограничить число строк, возвращаемых инструкцией SELECT.Use this clause to specify the number of rows returned from a SELECT statement. Также TOP можно использовать для указания числа строк, затрагиваемых инструкциями INSERT, UPDATE, MERGE или DELETE.Or, use TOP to specify the rows affected by an INSERT, UPDATE, MERGE, or DELETE statement.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

Ниже приводится синтаксис для SQL Server и Базы данных SQL Azure:Following is the syntax for SQL Server and Azure SQL Database:

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

Ниже приводится синтаксис для Хранилища данных SQL Azure и Parallel Data Warehouse:Following is syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

[   
    TOP ( expression )   
    [ WITH TIES ]  
]  

АргументыArguments

expressionexpression
Числовое выражение, определяющее количество возвращаемых строк.The numeric expression that specifies the number of rows to be returned. Если значение expression указано в процентах, оно неявно преобразуется в формат float.expression is implicitly converted to a float value if you specify PERCENT. В противном случае expression преобразуется в формат bigint.Otherwise, expression is converted to bigint.

PERCENTPERCENT
Указывает на то, что запрос возвращает только первые expression процентов строк из результирующего набора.Indicates that the query returns only the first expression percent of rows from the result set. Дробные значения округляются до следующего целого числа.Fractional values are rounded up to the next integer value.

WITH TIESWITH TIES
Возвращает две или более строки, которые соперничают за последнее место в ограниченном результирующем наборе.Returns two or more rows that tie for last place in the limited results set. Этот аргумент можно использовать только с предложением ORDER BY.You must use this argument with the ORDER BY clause. В режиме WITH TIES количество возвращаемых строк может превысить значение expression.WITH TIES might cause more rows to be returned than the value specified in expression. Например, если expression имеет значение 5 и существуют еще 2 строки с такими же значениями столбцов, указанных в предложении ORDER BY, что и у пятой строки, результирующий набор будет содержать 7 строк.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.

Предложение TOP можно сочетать с аргументом WITH TIES только в инструкциях SELECT, и только если вместе с ними задано предложение 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. Порядок возврата связанных записей произволен.The returned order of tying records is arbitrary. ORDER BY не влияет на это правило.ORDER BY doesn't affect this rule.

РекомендацииBest Practices

В инструкции SELECT всегда указывайте ORDER BY вместе с предложением TOP.In a SELECT statement, always use an ORDER BY clause with the TOP clause. Дело в том, что это единственный предсказуемый способ отбора строк предложением TOP.Because, it's the only way to predictably indicate which rows are affected by TOP.

Для реализации решения разбиения на страницы пользуйтесь предложениями OFFSET и FETCH в предложении ORDER BY, а не предложением TOP.Use OFFSET and FETCH in the ORDER BY clause instead of the TOP clause to implement a query paging solution. Решение разбиения на страницы (т.е. постраничной выдачи данных клиенту) проще реализовать с помощью предложений OFFSET и FETCH.A paging solution (that is, sending chunks or "pages" of data to the client) is easier to implement using OFFSET and FETCH clauses. Дополнительные сведения см. в разделе Предложение ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

Для ограничения числа возвращаемых строк пользуйтесь TOP (или OFFSET и FETCH), а не SET ROWCOUNT.Use TOP (or OFFSET and FETCH) instead of SET ROWCOUNT to limit the number of rows returned. Эти методы предпочтительнее, чем SET ROWCOUNT, по следующим причинам:These methods are preferred over using SET ROWCOUNT for the following reasons:

  • Являясь частью инструкции SELECT, оптимизатор запросов может принимать значение expression в предложениях TOP или FETCH во время оптимизации запроса.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. Так как SET ROWCOUNT используется вне инструкции, выполняющей запрос, значение не может быть учтено в плане запроса.Because you use SET ROWCOUNT outside of a statement that runs a query, its value can't be considered in a query plan.

Поддержка совместимостиCompatibility Support

В целях обратной совместимости скобки в инструкции SELECT необязательны.For backward compatibility, the parentheses are optional in SELECT statements. Мы рекомендуем всегда использовать круглые скобки для аргумента TOP в инструкциях SELECT.We recommend that you always use parentheses for TOP in SELECT statements. Такой подход обеспечивает согласованность с синтаксисом инструкций INSERT, UPDATE, MERGE и DELETE.Doing so provides consistency with its required use in INSERT, UPDATE, MERGE, and DELETE statements.

СовместимостьInteroperability

Выражение TOP не влияет на другие выражения, которые могут быть запущены триггером.The TOP expression doesn't affect statements that might run because of a trigger. Таблицы inserted и deleted в триггерах всегда возвращают только те строки, которые реально затронуты инструкциями INSERT, UPDATE, MERGE или 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. Например, если INSERT TRIGGER срабатывает в результате выполнения инструкции INSERT с предложением TOP,For example, if an INSERT TRIGGER fires as the result of an INSERT statement that used a TOP clause.

то SQL ServerSQL Server позволяет обновлять строки через представления.SQL ServerSQL Server allows for updating rows through views. Так как предложение TOP можно включать в определение представления, некоторые строки могут исчезнуть из представления после обновления, если они больше не соответствуют требованиям выражения TOP.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.

При использовании в инструкции MERGE предложение TOP применяется после соединения всей исходной таблицы и всей целевой таблицы,When specified in the MERGE statement, the TOP clause applies after the entire source table and the entire target table are joined. а также удаления соединенных строк, которые не соответствуют требованиям к вставке, обновлению или удалению.And, the joined rows that don't qualify for an insert, update, or delete action are removed. Предложение TOP дополнительно сокращает количество соединенных строк до указанного значения, а затем к оставшимся соединенным строкам применяются операции вставки, обновления или удаления без определенного порядка.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. Это означает, что порядок распределения строк по действиям, определенным в предложениях WHEN отсутствует.That is, there's no order in which the rows are distributed among the actions defined in the WHEN clauses. Например если TOP (10) в запросе затрагивает 10 строк, в их число могут попасть 7 обновляемых и 3 добавляемые строки.For example, if specifying TOP (10) affects 10 rows, of these rows, seven may be updated and three inserted. Или же 1 строка будет удаляемая, 5 обновляемых и 4 добавляемые строки либо любой другой вариант.Or, one may be deleted, five updated, and four inserted, and so on. Инструкция MERGE выполняет полное сканирование исходной и целевой таблиц, поэтому предложение TOP для изменения большой таблицы путем создания нескольких пакетов может снизить производительность ввода-вывода.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. В этом случае необходимо сделать так, чтобы все последующие пакеты содержали только новые строки.In this scenario, it's important to ensure that all successive batches target new rows.

Соблюдайте осторожность при использовании предложения TOP в запросе, содержащем операторы UNION, UNION ALL, EXCEPT и INTERSECT.Use caution when you're specifying the TOP clause in a query that contains a UNION, UNION ALL, EXCEPT, or INTERSECT operator. Есть вероятность того, что результаты запроса будут непредсказуемыми из-за неожиданной логики обработки предложений TOP и ORDER BY в операции выбора.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. Например, исходя из следующих таблиц и данных, предположим, что необходимо вернуть самый недорогой красный и синий автомобили.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. Иными словами, красный седан и синий фургон.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');  

Чтобы получить такие результаты, можно написать следующий запрос.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    

Ниже приведен результирующий набор.Following is the result set.

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

Возвращаются непредвиденные результаты, так как инструкция TOP логически выполняется раньше, чем предложение ORDER BY, которое сортирует результаты оператора (в данном случае UNION ALL).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). Таким образом, предыдущие запросы вернут произвольный красный и произвольный синий автомобили, а затем отсортируют результат такого объединения по цене.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. Следующий пример показывает, как правильно написать запрос, который позволит получить нужный результат.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    

Использование TOP и ORDER BY во вложенной операции выбора гарантирует, что результаты предложения ORDER BY применяются к предложению TOP, а не к сортировке результата операции 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.

Ниже приводится результирующий набор.Here is the result set.

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

ОграниченияLimitations and Restrictions

При использовании TOP в инструкции INSERT, UPDATE, MERGE или DELETE к строкам не применяется никакое упорядочение.When you use TOP with INSERT, UPDATE, MERGE, or DELETE, the referenced rows aren't arranged in any order. Также вы не можете напрямую указать предложение ORDER BY в этих инструкциях.And, you can't directly specify the ORDER BY clause in these statements. Если вы намерены использовать TOP, чтобы вставлять, удалять или изменять строки в определенном хронологическом порядке, добавьте TOP в предложение ORDER BY, включенное во вложенную инструкцию выборки.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. Подробнее см. раздел с примерами в этой статье.See the following Examples section in this article.

Предложение TOP не может быть использовано в инструкциях UPDATE и DELETE для секционированных представлений.You can't use TOP in an UPDATE and DELETE statements on partitioned views.

TOP нельзя сочетать с OFFSET и FETCH в одном выражении запроса (в той же области запроса).You can't combine TOP with OFFSET and FETCH in the same query expression (in the same query scope). Дополнительные сведения см. в разделе Предложение ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

ПримерыExamples

КатегорияCategory Используемые элементы синтаксисаFeatured syntax elements
Основной синтаксисBasic syntax TOP • PERCENTTOP • PERCENT
Включить равные значенияIncluding tie values WITH TIESWITH TIES
Ограничение числа строк, обрабатываемых инструкциями DELETE, INSERT и UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE DELETE • INSERT • UPDATEDELETE • INSERT • UPDATE

Основной синтаксисBasic syntax

В примерах этого раздела показана базовая функциональность предложения ORDER BY с использованием минимально необходимого синтаксиса.Examples in this section demonstrate the basic functionality of the ORDER BY clause using the minimum required syntax.

A.A. Использование ключевого слова TOP со значением константыUsing TOP with a constant value

В следующих примерах константа указывает число сотрудников, возвращаемых в результирующем наборе запроса.The following examples use a constant value to specify the number of employees that are returned in the query result set. В первом примере возвращаются 10 произвольных строк, так как отсутствует предложение ORDER BY.In the first example, the first 10 undefined rows are returned because an ORDER BY clause isn't used. Во втором примере предложение ORDER BY возвращает 10 сотрудников, последними принятых на работу.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. Использование ключевого слова TOP с переменнойUsing TOP with a variable

В следующем примере переменная указывает число сотрудников, возвращаемых в результирующем наборе запроса.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. Указание процентовSpecifying a percentage

В следующем примере PERCENT указывает число сотрудников, возвращаемых в результирующем наборе запроса.The following example uses PERCENT to specify the number of employees that are returned in the query result set. В таблице HumanResources.Employee содержится 290 сотрудников.There are 290 employees in the HumanResources.Employee table. 5 % от 290 является дробным числом, поэтому значение округляется вверх до целого числа.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    

Включить равные значенияIncluding tie values

A.A. Использование ключевого слова WITH TIES для включения строк, соответствующих значениям в последней строкеUsing WITH TIES to include rows that match the values in the last row

Следующий пример извлекает первые 10 процентов работников с наибольшей зарплатой и возвращает их в порядке убывания зарплаты.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. Выбор WITH TIES гарантирует, что в результирующий набор будут включены все работники с минимальной в этом списке зарплатой, даже если это приведет к превышению ограничения в 10 процентов работников.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    

Ограничение числа строк, обрабатываемых инструкциями DELETE, INSERT и UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE

A.A. Ограничение числа удаляемых строк с помощью ключевого слова TOPUsing TOP to limit the number of rows deleted

Если с инструкцией DELETE применяется предложение TOP (n), операция удаления производится с произвольной выборкой из n строк.When you use a TOP (n) clause with DELETE, the delete operation is done on an undefined selection of n number of rows. Таким образом, инструкция DELETE выбирает любое число (n) строк, которые удовлетворяют условию, указанному в предложении WHERE.That is, the DELETE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. Следующий пример удаляет из таблицы PurchaseOrderDetail 20 строк с датой завершения до 1 июля 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  

Если вы намерены с помощью предложения TOP удалять строки в требуемом хронологическом порядке, включите TOP во вложенный запрос с предложением ORDER BY.If you want to use TOP to delete rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. Следующий запрос удаляет из таблицы PurchaseOrderDetail 10 строк, имеющих самую раннюю дату.The following query deletes the 10 rows of the PurchaseOrderDetail table that have the earliest due dates. Чтобы гарантировать удаление только 10 строк, столбец, указанный в инструкции подзапроса выборки (PurchaseOrderID) должен являться первичным ключом таблицы.To ensure that only 10 rows are deleted, the column specified in the subselect statement (PurchaseOrderID) is the primary key of the table. Использование неключевого столбца в инструкции подзапроса выборки может привести к удалению более чем 10 строк, если указанный столбец содержит повторяющиеся значения.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. Ограничение числа вставляемых строк с помощью ключевого слова TOPUsing TOP to limit the number of rows inserted

В следующем примере создается таблица EmployeeSales и вставляется имя и данные о продажах за текущий год для 5 первых сотрудников из таблицы 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. Инструкция INSERT выбирает из результата инструкции SELECT произвольные 5 строк, которые удовлетворяют условию, определенному в предложении WHERE.The INSERT statement chooses any five rows returned by the SELECT statement that meet the criteria defined in the WHERE clause. Предложение OUTPUT отображает строки, вставляемые в таблицу EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Обратите внимание, что в инструкции SELECT не используется предложение ORDER BY для определения 5 первых сотрудников.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    

Если вы намерены с помощью предложения TOP добавлять строки в требуемом хронологическом порядке, включите TOP во вложенный запрос с предложением ORDER BY.If you want to use TOP to insert rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. Следующий пример показывает, как это сделать.The following example show how to do this. Предложение OUTPUT отображает строки, вставляемые в таблицу EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Обратите внимание, что вставка данных о 5 первых сотрудниках выполняется теперь по результатам предложения ORDER BY, а не для произвольных строк.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. Ограничение числа обновляемых строк с помощью ключевого слова TOPUsing TOP to limit the number of rows updated

В следующем примере предложение TOP используется для обновления строк в таблице.The following example uses the TOP clause to update rows in a table. Если предложение TOP (n) используется с инструкцией UPDATE, операция обновления выполняется для неопределенного количества строк.When you use a TOP (n) clause with UPDATE, the update operation runs on an undefined number of rows. Таким образом, инструкция UPDATE выбирает любое число (n) строк, которые удовлетворяют условию, указанному в предложении WHERE.That is, the UPDATE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. В следующем примере 10 случайно выбранных заказчиков переназначаются от одного менеджера по продажам к другому.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  

Если нужно применить изменения с предложением TOP в определенной последовательности, укажите во вложенном запросе SELECT предложение ORDER BY.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. В следующем примере изменяется длительность отпуска для 10 сотрудников, имеющих наибольший стаж работы.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  

Примеры: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) and Параллельное хранилище данныхParallel Data Warehouse

В приведенном ниже примере возвращаются первые строки (31), соответствующие условию запроса.The following example returns the top 31 rows that match the query criteria. Предложение ORDER BY гарантирует, что возвращается 31 строка в порядке сортировки столбца 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.

Использование TOP без указания равных элементов.Using TOP without specifying ties.

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

Результат: возвращается 31 строка.Result: 31 rows are returned.

Использование TOP с указанием WITH TIES.Using TOP, specifying WITH TIES.

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

Результат: возвращаются 33 строки, так как на 31-ю строку претендуют 3 сотрудника с фамилией Brown.Result: 33 rows are returned, because three employees named Brown tie for the 31st row.

См. также:See 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 (Transact-SQL) ORDER BY Clause (Transact-SQL)
SET ROWCOUNT (Transact-SQL) SET ROWCOUNT (Transact-SQL)
MERGE (Transact-SQL)MERGE (Transact-SQL)