如何将多个序列号范围插入到 SQL 中的 1 列?

How can I insert multiple ranges of sequential numbers to 1 column in SQL?

我在 table 中创建了一个空列 "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)

你可以使用 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);