Cosa significa “ORDER BY (SELEZIONA NULL)”?

Il seguente SQL proviene da Itzik Ben-Gan che viene utilizzato per generare una tabella di numeri. Cosa significa l’ order by (select null) ? Grazie.

 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; 

Grazie!

ROW_NUMBER richiede una clausola ORDER BY sintatticamente. Non puoi usarlo senza uno. SELECT NULL è un hack per bloccare l’errore senza imporre alcun ordine particolare. In questo caso non è necessario imporre alcun ordine, quindi l’opzione più veloce è usare SELECT NULL .

L’ottimizzatore vede attraverso questo trucco, quindi non ha costi di runtime (questa richiesta è facilmente verificabile guardando il piano di esecuzione).