Вопрос по sql-server – Что означает «ORDER BY (SELECT NULL)»?

39

Следующий SQL взят из Ицик Бен-Гана, который используется для создания таблицы чисел. Что этоorder by (select null) часть значит? Благодарю.

DECLARE @number_of_numbers INT;
SELECT @number_of_numbers = 100000;

WITH    a AS ( SELECT   1 AS i
               UNION ALL
               SELECT   1
             ),
        b AS ( SELECT   1 AS i
               FROM     a AS x ,
                        a AS y
             ),
        c AS ( SELECT   1 AS i
               FROM     b AS x ,
                        b AS y
             ),
        d AS ( SELECT   1 AS i
               FROM     c AS x ,
                        c AS y
             ),
        e AS ( SELECT   1 AS i
               FROM     d AS x ,
                        d AS y
             ),
        f AS ( SELECT   1 AS i
               FROM     e AS x ,
                        e AS y
             ),
        numbers
          AS ( SELECT TOP ( @number_of_numbers )
                        ROW_NUMBER() OVER ( ORDER BY ( SELECT   NULL
                                                     ) ) AS number
               FROM     f
             )
    SELECT  *
    FROM    numbers;

Спасибо!

Ваш Ответ

1   ответ
66

ROW_NUMBER требуетORDER BY пункт синтаксически. Вы не можете использовать это без одного.SELECT NULL взломать ошибку, не применяя какой-либо конкретный порядок. В этом случае нам не нужно применять какой-либо порядок, поэтому самым быстрым вариантом является использованиеSELECT NULL.

Оптимизатор видит эту хитрость, поэтому он не требует затрат времени выполнения (это утверждение легко проверить, посмотрев план выполнения).

Его также можно использовать в качестве заявления о намерениях, когда это фактически не требуется. Например, в книге учебных пособий Micrsoft «Запросы на Microsoft SQL Server 2012» они рекомендуют добавить ее к действительному запросу как «... если вы действительно после трех произвольных строк, это может быть хорошей идеей для добавьте предложение ORDER BY с выражением (SELECT NULL), чтобы люди знали, что ваш выбор преднамеренный, а не недосмотр. & quot;

Похожие вопросы