TOP (Transact-SQL)

Изменения: 17 ноября 2008 г.

Указывает на то, что будет возвращен только первый набор строк из результата запроса. Набор строк может быть либо числом, либо процентом. Предложение TOP может быть использовано в инструкциях SELECT, INSERT, UPDATE и DELETE.

Значок ссылки на разделСоглашения о синтаксическом обозначении в Transact-SQL

Синтаксис

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

Аргументы

  • expression
    Числовое выражение, которое задает количество возвращаемых строк. Аргумент expression прямо преобразуется в значение типа float, если указан PERCENT. В противном случае преобразуется в тип bigint.

    Разделение круглыми скобками в аргументе expression параметра TOP требуется в инструкциях INSERT, UPDATE и DELETE. В целях обратной совместимости использование TOP expression без скобок в инструкции SELECT поддерживается, но не рекомендуется к использованию.

    Если запрос включает предложение ORDER BY, возвращаются первые expression строк или expression процентов строк, отсортированных посредством предложения ORDER BY. Если запрос не содержит предложение ORDER BY, порядок строк будет произвольным.

  • PERCENT
    Указывает на то, что запрос возвращает только первые expression процентов строк из результирующего набора.
  • WITH TIES
    Указывает на то, что будут возвращены дополнительные строки из основного результирующего набора с тем же значением в столбцах ORDER BY, которые появляются как последние из TOP n (PERCENT) строк. Предложение TOP...WITH TIES может быть задано только в инструкциях SELECT, и только если указано предложение ORDER BY.

    ms189463.note(ru-ru,SQL.90).gifПримечание.
    Порядок возвращаемых связанных записей носит произвольный характер. На это правило не оказывает влияние SORT BY.

Замечания

Предложение TOP не может быть использовано вместе с инструкциями UPDATE и DELETE для секционированных представлений.

Строки, на которые ссылается выражение TOP, используемое с INSERT, UPDATE и DELETE, не расположены в определенном порядке. TOP n возвращает n случайных строк. Например, следующая инструкция INSERT содержит предложение ORDER BY, но это предложение не влияет на строки, на которые явно ссылается инструкция INSERT.

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

Предложение ORDER BY в предыдущем запросе ссылается только на строки, возвращаемые вложенной инструкцией SELECT. Инструкция INSERT выбирает любые две строки из строк, возвращенных инструкцией SELECT. Чтобы убедиться в том, что вставлены первые две строки из вложенного запроса SELECT, перепишите запрос следующим образом.

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

Microsoft SQL Server 2005 позволяет обновлять представления, которые были созданы с предложением TOP. Так как в определение представления включено предложение TOP, определенные строки могут исчезнуть из представления из-за обновления, если результат более не соответствует требованиям выражения TOP. Дополнительные сведения см. в разделе Изменение данных через представление.

Выражение TOP в запросе не влияет на инструкции, которые могут быть выполнены из-за срабатывания триггера. Вложенные и обновленные таблицы в триггерах покажут только строки, которые действительно были задействованы в инструкциях INSERT, UPDATE или DELETE.

Примеры

А. Использование предложения TOP с переменными

Следующий пример использует переменные для получения первых 10 работников, перечисленных в таблице dbo.Employee базы данных AdventureWorks.

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

Б. Использование предложения TOP с параметрами PERCENT и WITH TIES

Следующий пример извлекает первые 10 процентов работников с наибольшей зарплатой и возвращает их в порядке убывания базовой ставки зарплаты. Указание параметра WITH TIES позволяет быть уверенным в том, что все работники с зарплатой, равной минимальной возвращенной зарплате, включены в результирующий набор, даже если это приведет к превышению ограничения в 10 процентов работников.

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;

См. также

Справочник

SELECT (Transact-SQL)
INSERT (Transact-SQL)
UPDATE (Transact-SQL)
DELETE (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 ноября 2008 г.

Изменения
  • Добавлено примечание в описание аргумента WITH TIES.

5 декабря 2005 г.

Изменения
  • Обновлен пример Б.