"ORDER BY(SELECT NULL)"是什么意思?

Jus*_*ner 41 sql-server select sql-order-by

以下SQL来自Itzik Ben-Gan,用于生成数字表.这个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;
Run Code Online (Sandbox Code Playgroud)

谢谢!

usr*_*usr 73

ROW_NUMBERORDER BY语法上需要一个子句.没有一个你不能使用它.SELECT NULL是一个黑客在没有强制执行任何特定订单时关闭错误.在这种情况下,我们不需要强制执行任何订单,因此最快的选择是使用SELECT NULL.

优化器可以看到这个技巧,因此它没有运行时成本(通过查看执行计划可以轻松验证此声明).

  • 当它实际上不需要时,它也可以用作意图声明.例如,在Micrsoft的培训套件"查询Microsoft SQL Server 2012"中,他们建议将其添加到有效查询中,"......如果您真的在三个任意行之后,添加ORDER BY可能是个好主意带有表达式(SELECT NULL)的子句让人们知道你的选择是有意的而不是疏忽." (14认同)