我想在特定系列的列中有值
10100
10200
10300
.
.
.
.
11000
11100
11200
.
.
这该怎么做 ?我认为会使用while循环
insert into mytable(col_name)
select <>
我想在特定系列的列中有值
10100
10200
10300
.
.
.
.
11000
11100
11200
.
.
这该怎么做 ?我认为会使用while循环
insert into mytable(col_name)
select <>
你可以这样做:
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 行您正在查找的序列,这称为算术级数,并且在您的序列中,序列的第 n 项由 给出A + (n - 1) * d
。在您的序列中:a = 10100
第一个数字,起始数字,d = 100
即种子。
首先,我使用了一个生成 10 个数字的锚查询(请注意,此语法是 SQL Server 2008 的新语法),
然后我将它与自身交叉连接 3 次,给我 10 3行 = 1000 行我使用它们根据规则生成 1000 个此序列的数字:每个 n 数字 = A + (n - 1) * d
,如果你需要更多的交叉连接它自己更多次。
然后,您可以将它们插入到新表中,只需执行INSERT INTO SELECT
,而不是SELECT
.
请注意:您可能需要使用IDENTITY
column 而不是所有这些东西,使用它您可以定义起始值和种子值,然后它将自动递增,请参阅这篇文章:
请试试这个:
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