我希望在特定系列的列中包含值
10100
10200
10300
.
.
.
.
11000
11100
11200
.
.
怎么做?我认为while循环将被使用
insert into mytable(col_name)
select <>
答案 0 :(得分:3)
你可以这样做:
WITH Temp
AS
(
SELECT digit
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS temp(digit)
), Nums
AS
(
SELECT t3.digit * 100 + t2.digit * 10 + t1.digit + 1 AS id
FROM TEMP AS t1
CROSS JOIN TEMP AS t2
CROSS JOIN TEMP AS t3
)
SELECT
n = 10100 + (id - 1) * 100
from nums
ORDER BY n;
此查询将为您要查找的序列提供1000行,称为Arithmetic progression,在您的序列中,序列的第n个术语由A + (n - 1) * d
给出。在您的序列中:a = 10100
第一个数字,起始编号d = 100
,它是种子。
首先,我使用了一个生成10个数字的锚点查询(请注意,这种语法对SQL Server 2008来说是新的),
然后我交叉加入它自己3次给我10个 3 行= 1000行我用它们根据规则生成1000个这个序列的数量:每个n数= { {1}},如果您需要更多次交叉加入,可以多次使用它。
然后,您可以将它们插入新表中,只需A + (n - 1) * d
,而不只是INSERT INTO SELECT
。
请注意:您可能需要使用IDENTITY
列而不是所有这些内容,使用它可以定义起始值和种子值,然后它会自动递增,看到这篇文章:
答案 1 :(得分:2)
请试试这个:
DECLARE @table as TABLE(NUM bigint)
declare @var bigint
set @var=10100
while @var<11200
begin
insert into @table values (@var)
set @var=@var+100
end
select * from @table