如何在SQL中的一列中插入多个序列号范围?

如何在SQL中的一列中插入多个序列号范围?,sql,autofill,sequential,Sql,Autofill,Sequential,我在表中创建了一个空列ZipCodes。 我想用以下数字自动填充此列: 1000-3900 4000-9999 所以所有这些序列号都需要在1列中,从1000开始,以9999结束,但我不想包括3901-3999范围。 如何在SQL中实现这一点?这里有一种方法。这将生成从1000到10000的数字,忽略3901到4000之间的数字 with row_generator as ( select * from master..spt_values

我在表中创建了一个空列ZipCodes。 我想用以下数字自动填充此列: 1000-3900 4000-9999

所以所有这些序列号都需要在1列中,从1000开始,以9999结束,但我不想包括3901-3999范围。
如何在SQL中实现这一点?

这里有一种方法。这将生成从1000到10000的数字,忽略3901到4000之间的数字

with row_generator
  as (
         select *
           from master..spt_values
      )
  ,ten_thousand_rows
   as (
        select top 10000
               row_number() over(order by (select null))+1000 as rnk
          from row_generator a   
          join row_generator b
            on 1=1
        )
select rnk
  from ten_thousand_rows
where rnk between 1000 and 10000
  and NOT(rnk between 3901 and 3999)
在这之后,你可以做一个

 with row_generator
      as (
             select *
               from master..spt_values
          )
      ,ten_thousand_rows
       as (
            select top 10000
                   row_number() over(order by (select null))+1000 as rnk
              from row_generator a   
              join row_generator b
                on 1=1
            )
    insert
      into dest_table(autofill_column)
    select rnk
      from ten_thousand_rows
    where rnk between 1000 and 10000
      and NOT(rnk between 3901 and 3999)

这里有一种方法可以做到这一点。这将生成从1000到10000的数字,忽略3901到4000之间的数字

with row_generator
  as (
         select *
           from master..spt_values
      )
  ,ten_thousand_rows
   as (
        select top 10000
               row_number() over(order by (select null))+1000 as rnk
          from row_generator a   
          join row_generator b
            on 1=1
        )
select rnk
  from ten_thousand_rows
where rnk between 1000 and 10000
  and NOT(rnk between 3901 and 3999)
在这之后,你可以做一个

 with row_generator
      as (
             select *
               from master..spt_values
          )
      ,ten_thousand_rows
       as (
            select top 10000
                   row_number() over(order by (select null))+1000 as rnk
              from row_generator a   
              join row_generator b
                on 1=1
            )
    insert
      into dest_table(autofill_column)
    select rnk
      from ten_thousand_rows
    where rnk between 1000 and 10000
      and NOT(rnk between 3901 and 3999)

你可以使用CTE

;WITH temp_recoreds AS
(
SELECT 1000 AS ZipCode
UNION ALL
SELECT  CASE WHEN ZipCode=3900 THEN 4000 ELSE ZipCode+1 END AS ZipCode FROM temp_recoreds WHERE ZipCode<=9998
)
INSERT
      INTO Your_table(ZipCode)
      SELECT  z.ZipCode
      FROM temp_recoreds AS z
OPTION (MAXRECURSION 0);

你可以使用CTE

;WITH temp_recoreds AS
(
SELECT 1000 AS ZipCode
UNION ALL
SELECT  CASE WHEN ZipCode=3900 THEN 4000 ELSE ZipCode+1 END AS ZipCode FROM temp_recoreds WHERE ZipCode<=9998
)
INSERT
      INTO Your_table(ZipCode)
      SELECT  z.ZipCode
      FROM temp_recoreds AS z
OPTION (MAXRECURSION 0);

写一个存储过程。你是哪个数据库using@jarlh你是说我需要从1000自动填充到9999,然后写一个使用指定范围的过程?如果是的话,你能告诉我如何用数字1000-9999自动填充该列吗?@George我使用MicrosoftSQL@FustratedDeveloper它是新创建的空列。约瑟夫解决这个问题的方法对我来说非常有效!谢谢!写一个存储过程。你是哪个数据库using@jarlh你是说我需要从1000自动填充到9999,然后写一个使用指定范围的过程?如果是的话,你能告诉我如何用数字1000-9999自动填充该列吗?@George我使用MicrosoftSQL@FustratedDeveloper它是新创建的空列。约瑟夫解决这个问题的方法对我来说非常有效!谢谢!