-1

我想在特定系列的列中有值

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

这该怎么做 ?我认为会使用while循环

insert into mytable(col_name)
select <>
4

2 回答 2

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 小提琴演示


这是如何工作的?

此查询将为您提供 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.


请注意:您可能需要使用IDENTITYcolumn 而不是所有这些东西,使用它您可以定义起始值和种子值,然后它将自动递增,请参阅这篇文章:

于 2013-03-18T06:16:17.423 回答
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
于 2013-03-18T06:12:06.893 回答