如何在 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
;
例如,如果我在 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
;