如何在表格列中输入一系列数字

时间:2013-03-18 06:07:29

标签: sql sql-server tsql

我希望在特定系列的列中包含值

10100
10200
10300
.
.
.
.
11000
11100
11200
.
.

怎么做?我认为while循环将被使用

insert into mytable(col_name)
select <>

2 个答案:

答案 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;

SQL Fiddle Demo


这是如何运作的?

此查询将为您要查找的序列提供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