The following SQL is from Itzik Ben-Gan that is used to generate a numbers table. What does the order by (select null) part mean? Thanks.
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;
Thanks!
ROW_NUMBER requires an
ORDER BYclause syntactically. You cannot use it without one.SELECT NULLis a hack to shut up the error while not enforcing any particular order. In this case we don’t need to enforce any order, so the fastest option is to useSELECT NULL.The optimizer sees through this trick, so it has no runtime cost (this claim is easily verified by looking at the execution plan).