SQL Server:使用select语句创建动态范围的行

时间:2016-11-01 08:07:21

标签: sql-server select

使用Ruby,您可以使用以下代码生成数组:

some_range = (1..10).to_a
# Returns => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我正在使用SELECT语句在SQL Server中寻找类似的东西。即我想制作这张桌子:

id
1
2
3
4
5
6
7
8
9
10
etc

声明如下:

DECLARE @ids TVP
INSERT @ids
    (id)
SELECT RANGE(0..10000)

我的用例是我想要一种快速的方法来测试将@ids作为TVP的SP。 SQL Server是否提供了实现此目的的东西?

2 个答案:

答案 0 :(得分:1)

如果我想生成一个数字表,我通常会使用这样的递归CTE:

;WITH NumberGen AS
(
    SELECT 1 AS Number
    UNION ALL 
    SELECT Number + 1 AS Number
    FROM NumberGen
    WHERE Number < $#RowsToBeGenerated$
)
INSERT INTO $Table$($Field$)
    (   
        SELECT Number
        FROM NumberGen
        WHERE Number BETWEEN 1 AND $#RowsToBeGenerated$
    )
    OPTION (MAXRECURSION 0);

答案 1 :(得分:1)

DECLARE @Range INT = 10

    ;with cte
    as
    (
    select 1 as value
    union all
    select value + 1 from cte where value < @Range
    )
    select * from cte