从一个表到另一个表的SQL复制,ID值不断变化

时间:2015-03-20 08:15:30

标签: sql sql-server-2008-r2 copy

我有两张桌子:

A

ID   VALUE
----------
1      7
2      5
3      44
4      982
5      1
6      0
7      671

ID     VALUE
---------------
1       6
2       6
3       77
4       22

如何将数据从#B复制到#A以获取不同的ID(比#A中的MAX大一个)?例如,我需要得到

ID   VALUE
1      7
2      5
3      44
4      982
5      1
6      0
7      671
8       6
9       6
10      77
11      22

2 个答案:

答案 0 :(得分:1)

将其设为IDENTITY列自动递增,或者:

INSERT INTO A
   SELECT b.ID + (SELECT MAX(ID) FROM A) AS ID, b.Value
   FROM B

DEMO

如果表B中的ID有间隙,则选择略有不同。然后转移这些差距。

答案 1 :(得分:0)

如果ID中的TableA列尚未设置为自动递增,请执行以下命令:

ALTER TABLE TableA MODIFY COLUMN ID INT auto_increment

现在,您只需将TableB中的所有记录插入TableA

即可
INSERT INTO TableA (VALUE)
SELECT VALUE
FROM TableB

依靠查询中的业务逻辑来维护ID列的顺序并不是一个好主意。相反,让SQL为您处理它;它是为此目的而设计的。