Поделиться через


Ограничение результирующих наборов с помощью предложений TOP и PERCENT

Чтобы ограничить количество строк, возвращаемых в результирующий набор, можно использовать предложение TOP.

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

Выражение expression является числовым выражением, которое определяет число возвращаемых строк; или, если указан PERCENT, возвращается процентное соотношение строк результирующего набора (указанное при помощи expression). Например:

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

Если в инструкции SELECT вместе с предложением TOP также содержится предложение ORDER BY, возвращаемые строки выбираются из упорядоченного результирующего набора. Весь результирующий набор строится в определенном порядке, и возвращаются верхние строки n этого набора. Если также указывается WITH TIES, возвращаются все строки, содержащие последнее значение, возвращенное предложением ORDER BY, даже если их количество превышает число, указанное expression.

TOP и SET ROWCOUNT

Еще одним способом ограничения размеров результирующего набора является предварительное выполнение инструкции SET ROWCOUNT n. Есть ряд различий между предложениями SET ROWCOUNT и TOP:

  • Ограничение SET ROWCOUNT применяется к построению строк в результирующем наборе после оценки ORDER BY. Если указано предложение ORDER BY, инструкция SELECT завершается, когда строки n выбраны из набора значений, отсортированного согласно заданной классификации ORDER BY.
  • Предложение TOP применяется только к той инструкции SELECT, в которой оно указано. SET ROWCOUNT продолжает действовать до выполнения другой инструкции SET ROWCOUNT, например, SET ROWCOUNT 0, которая выключит этот параметр.
    ms187043.note(ru-ru,SQL.90).gifВажно!
    Использование инструкции SET ROWCOUNT не повлияет на работу инструкций DELETE, INSERT и UPDATE в следующем выпуске SQL Server. При программировании избегайте использования инструкции SET ROWCOUNT с инструкциями DELETE, INSERT и UPDATE и постарайтесь внести изменения в приложения, которые используют ее в настоящее время. Рекомендуется заменить SET ROWCOUNT на TOP для инструкций DELETE, INSERT и UPDATE.
    Несмотря на то, что действие SET ROWCOUNT на инструкцию SELECT остается прежним, предпочтительно с инструкцией SELECT использовать TOP по ряду причин: - SET ROWCOUNT приводит к тому, что большинство инструкций SELECT, INSERT, UPDATE и DELETE перестают выполняться, обработав указанное количество строк. Такое поведение применимо и по отношению к срабатыванию триггеров. - Как часть инструкции SELECT, в процессе формирования плана выполнения запроса оптимизатор запросов может использовать значение *expression* в предложении TOP. Учитывая то, что SET ROWCOUNT используется вне инструкции, выполняющей запрос, его значение не может быть использовано для формирования плана запроса.

См. также

Другие ресурсы

TOP (Transact-SQL)
SELECT (Transact-SQL)
SET ROWCOUNT (Transact-SQL)

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

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