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!
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).