【问题标题】:Insert values into table from a range将值从范围插入表中
【发布时间】:2018-05-16 02:14:19
【问题描述】:

我正在尝试插入一个表(比如 table1),我想在附加一个 char 或 int 声明后插入一系列数字?

例如。 范围 1-10

abc1,
abc2,
abc3,
abc4,
.
.
.

有什么想法吗?

【问题讨论】:

  • 范围到底是什么?它是从哪里来的?
  • 提示:使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。请注意,tsql 缩小了选择范围,但没有指定数据库。

标签: sql tsql sql-server-2017


【解决方案1】:

为此我喜欢递归 CTE:

with nums as (
      select @rangestart as n
      union all
      select n + 1
      from nums
      where n < @rangeend
     )
insert into table1(col)
    select 'abc' + cast(nums.n as varchar(255))
    from nums;

如果您的号码超过 100 个,则应使用 MAXRECURSION 选项。此外,任何数字表都可以达到同样的目的。

【讨论】:

    【解决方案2】:

    Gordon Linoff 解决方案效果很好!只做了一个小的修改。 对于那些寻找未来解决方案的人。

    DECLARE
        @rangestart INT,
        @rangeend INT
    SET @rangestart = 1
    SET @rangeend = 10
    ;
    with nums as (
          select @rangestart as n
          union all
          select n + 1
          from nums
          where n < @rangeend
         )
    insert into Table1(Colum)
        select 'abc' + cast(nums.n as varchar(255))
        from nums;
    

    在我的测试表中,艺术家列是我的测试表。 enter image description here

    【讨论】:

      【解决方案3】:

      我比我更喜欢 Gordon 的回答,但它对我不起作用,因为 SQL Server 只允许有限数量的递归(根据错误消息为 100 级)。

      所以这是我使用 while() 循环的解决方案:

      
      Declare @Current int = 1
      Declare @End int = 20
      Declare @Strings as table(Text varchar(5))
      
      WHILE @Current <= @End
      BEGIN  
          Insert Into @Strings Values('abc' + Cast(@Current as varchar(2)))
          Set @Current = @Current + 1
      END  
      
      Select * From @Strings
      
      
      

      【讨论】:

      • 注意:我写完后发现可以改变 SQL Server 的递归级别。
      【解决方案4】:
      with nums as (
        select 1 as n
        union all
        select n + 1 as n
        from nums
        where n <= 9
       )
      

      插入table1(col) 选择 'abc' + cast(nums.n as varchar(255)) 来自数字;

      从表 1 中选择 *

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 2019-07-08
        相关资源
        最近更新 更多