如何在 SQL 服务器中使用自动增量从一个 table 插入到另一个

How can I insert into from one table to another with autoincrement in SQL Server

例如,如果我在 SQL 服务器中有这 2 个 table:

            Table 1       ||          Table 2
--------------------------||----------------------------
    Number    |    Name   ||     Number    |    Name
--------------|-----------|| --------------|------------
      1       |     B     ||       1       |      A   
      2       |     C     ||               |    

我想做的是插入从 table 1 到 table 2 的条目,但我希望 table 2 自动递增数字。所以我希望它变成这样:

           Table 2        ||
--------------------------||
    Number    |    Name   ||
--------------|-----------||
      1       |     A     ||
      2       |     B     ||
      3       |     C     ||

我试过这样的查询,但没有成功:

Insert into table2 (Number, Name)
    select 
        (select max(number) + 1 from table1), Name 
    from table1

也许你会建议在 table2 主键中创建数字,但我想像上面的查询一样使用最大数字来做到这一点。

提前致谢。

这可能有点过于简单,也许您正在寻找更复杂的东西,但是...

INSERT INTO Table2 (Number, Name)
SELECT
   T.Number + X.MaxRowNumber
  ,T.Name
FROM Table1 T
INNER JOIN (SELECT MAX(Number) AS MaxRowNumber FROM Table2) X
  ON 1 = 1
;

此方法基于您的陈述:

Maybe you will suggest to make the number in table2 primary key, but I want to do it using the max number like the query above.

据我了解,您不想将 Table2.Number 设置为 IDENTITY 列,而是希望在 INSERT 操作期间执行自动增量。

我倾向于同意其他答案说 Table2.Number 应该是一个 IDENTITY 列,因此无需计算它就可以自动递增,但如果这不是你想要的,那么这个答案应该能帮到你。

您可以使用 table 变量和真实数据对此进行测试,以确保它是您要查找的内容:

DECLARE @TABLE1 AS TABLE (Number INT, Name CHAR(1));
DECLARE @TABLE2 AS TABLE (Number INT, Name CHAR(1));
INSERT INTO @TABLE1 (Number, Name) VALUES ('1','B'), ('2','C');
INSERT INTO @TABLE2 (Number, Name) VALUES ('1','A');

INSERT INTO @TABLE2 (Number, Name)
SELECT
   T.Number + X.MaxRowNumber
  ,T.Name
FROM @TABLE1 T
CROSS APPLY (SELECT MAX(Number) AS MaxRowNumber FROM @TABLE2) X
;

SELECT * FROM @TABLE2
;