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.Примечание. Порядок возвращаемых связанных записей носит произвольный характер. На это правило не оказывает влияние 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 г. |
|
5 декабря 2005 г. |
|