使用数字范围创建临时表

LNo*_*ote 9 sql t-sql sql-server sql-server-2008

我有一个表,其行具有范围的起始和结束编号,例如

key     startID       endID
 1         500        505
 2         784        788
 3         802        804
Run Code Online (Sandbox Code Playgroud)

等等..

我想创建一个临时表(或表变量/ cte等),每个这些数字都有一行,它们在它们之间覆盖的范围 - 即给出上面的例子,我希望看到一个包含以下行的表:

ID
500
501
502
503
504
505
784
785
786
787
788
802
803
804
Run Code Online (Sandbox Code Playgroud)

任何人都能指出我快速简便的方法来实现这一目标吗?我想过以某种方式使用数字表,但我正在看的表有> 200m的行,而且我没有那么大的数字表!

任何帮助深表感谢.提前致谢.

Qua*_*noi 12

WITH    q AS
        (
        SELECT  startId, endId
        FROM    ranges
        UNION ALL
        SELECT  startId + 1, endId
        FROM    q
        WHERE   startId < endId
        )
SELECT  startId
FROM    q
OPTION  (MAXRECURSION 0)
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 5

在MSSQL中,您还可以使用从任意大表中进行选择,以syscolumns为例。如果没有足够的行,则可以进行交叉联接:

SELECT        TOP 10000
ROW_NUMBER() OVER (ORDER BY c1.id)
FROM          syscolumns AS c1
CROSS JOIN    syscolumns AS c2
Run Code Online (Sandbox Code Playgroud)