A CTE could also be used to generate a tally table in memory. This can come in handy if you don't have access to create a table or wish to create a table for short-term use.
WITH Tally
AS
(
SELECT
TOP 20000
ROW_NUMBER() OVER (ORDER BY SC1.name) AS N
FROM
master.dbo.syscolumns AS SC1
CROSS JOIN master.dbo.syscolumns AS SC2
)