在SQL Server中生成常量范围

Joe*_*ley 1 sql sql-server-2005

有没有办法选择一系列常量,例如1到100之间的每个整数,或两个日期之间的每个月?

而不是这样做......

select '2010-01-01' union
select '2010-02-01' union
select '2010-03-01' union
select '2010-04-01' union
select '2010-05-01' union
select '2010-06-01' union
select '2010-07-01' union
select '2010-08-01' union
select '2010-09-01' union
select '2010-10-01' union
select '2010-11-01' union
select '2010-12-01'
Run Code Online (Sandbox Code Playgroud)

Mar*_*Hám 6

您可以对1到100之间的每个整数使用CTE查询.

WITH IntegerRangeCTE([i]) AS
(
    SELECT
        1 AS [i]
    UNION ALL
    SELECT
        [i] + 1
    FROM
        IntegerRangeCTE
    WHERE [i] < 100
)
SELECT * FROM IntegerRangeCTE
Run Code Online (Sandbox Code Playgroud)

对于2010-01-01至2010-12-31区间的日期,您可以使用此日期.

WITH DateRangeCTE([d]) AS
(
    SELECT
        CONVERT(DATETIME, '2010-01-01') AS [d]
    UNION ALL
    SELECT
        DATEADD(m, 1, [d]) AS [d]
    FROM
        DateRangeCTE
    WHERE [d] < DATEADD(m, -1, CONVERT(DATETIME, '2010-12-31'))
)
SELECT * FROM DateRangeCTE
Run Code Online (Sandbox Code Playgroud)

如果收到消息"语句终止.在语句完成之前,最大递归N已用完." ,使用查询提示 MAXRECURSION.