【问题标题】:How to insert Auto-Increment using SELECT INTO Statement? SQL SERVER如何使用 SELECT INTO 语句插入自动增量? SQL 服务器
【发布时间】:2019-02-01 08:21:46
【问题描述】:

这是我的桌子1:

Name        Description  
john        student       
dom         teacher

我需要使用 SELECT * INTO 将其传输到另一个表 (table2),但我希望它带有一个名为 Auto 的新列,该列是自动递增的

看起来像这样:

Name       Description        Auto
John        Student            1
Dom         Teacher            2

当前代码:SELECT * INTO table2 FROM table1

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    使用ROW_NUMBER添加从1开始的序号。

    SELECT *,
        Auto = ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    INTO table2 
    FROM table1
    

    【讨论】:

      【解决方案2】:

      当将一个表分成几个具有确切行数的较小表时,接受的答案具有额外的便利性。如有必要,可以删除用于自动增量的列。

      SELECT *,
          ID = ROW_NUMBER() OVER(ORDER BY ( SELECT NULL ))
      INTO #Table2
      FROM Table1
      
      DECLARE @start INT, @end INT;
      SET @start = 1;
      SET @end = 5000000;
      
      SELECT *
      INTO Table3
      FROM #Table2
      WHERE ID BETWEEN @start AND @end;
      
      ALTER TABLE Table3 DROP COLUMN ID;       
      

      【讨论】:

        【解决方案3】:

        您可以为此使用身份字段,这就是它们的用途。 identity(1,1) 的逻辑意味着它会从数字 1 开始,每次递增 1。

        样本数据;

        CREATE TABLE #OriginalData (Name varchar(4), Description varchar(7))
        INSERT INTO #OriginalData (Name, Description)
        VALUES
        ('John','student')
        ,('Dom','teacher')
        

        创建一个新表并将数据插入其中;

        CREATE TABLE #NewTable (Name varchar(4), Description varchar(7), Auto int identity(1,1))
        INSERT INTO #NewTable (Name, Description)
        SELECT 
        Name
        ,Description 
        FROM #OriginalData
        

        将结果显示为;

        Name    Description Auto
        John    student     1
        Dom     teacher     2
        

        如果您再运行几次插入,您的结果将如下所示;

        Name    Description Auto
        John    student     1
        Dom     teacher     2
        John    student     3
        Dom     teacher     4
        John    student     5
        Dom     teacher     6
        

        【讨论】:

          猜你喜欢
          • 2019-01-24
          • 2020-10-14
          • 1970-01-01
          • 2012-10-18
          • 1970-01-01
          • 2011-10-07
          • 2023-03-06
          • 1970-01-01
          • 2017-11-09
          相关资源
          最近更新 更多