web-dev-qa-db-fra.com

Que signifie "ORDER BY (SELECT NULL)"?

Le SQL suivant provient d'Itzik Ben-Gan qui est utilisé pour générer une table de nombres. Que signifie la partie order by (select null)? Merci.

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;

Merci!

44
Just a learner

ROW_NUMBER nécessite un ORDER BY clause syntaxiquement. Vous ne pouvez pas l'utiliser sans un. SELECT NULL est un hack pour fermer l'erreur sans appliquer un ordre particulier. Dans ce cas, nous n'avons pas besoin d'exécuter une commande, donc l'option la plus rapide est d'utiliser SELECT NULL.

L'optimiseur voit à travers cette astuce, donc il n'a aucun coût d'exécution (cette revendication est facilement vérifiée en regardant le plan d'exécution).

76
usr