[英]Insert records from one table on another table incrementing id
如何将记录从一个表(表 1)插入到不同 SQL 数据库中的同一个表(表 2)?
但是,目标表已经存在并且具有相同 id(c1) 的记录。 table1 的记录必须添加到 table2,但我必须增加字段 (c1)。
表格1
C1;C2;C3;
1;Name 1;Address 1;
2;Name 2;Address 2;
3;Name 3;Address 3;
4;Name 4;Address 4;
表2
C1;C2;C3 ;
1;Name 11;Address 11;
2;Name 12;Address 12;
3;Name 13;Address 13;
4;Name 14;Address 14;
5;Name 1;Address 1;
6;Name 2;Address 2;
7;Name 3;Address 3;
8;Name 4;Address 4;
怎么了? 两个数据库中的表 cl 和以下列相同:(clstamp、nome、no、estab、vendnm、ncont)
INSERT INTO DB2..cl(clstamp, nome, estab, vendnm, ncont)
select clstamp, nome, estab, vendnm, ncont
FROM [DB1]..[cl]
LEFT JOIN [DB2]..[cl] ON [DB1]..[cl].clstamp=[DB2]..[cl].clstamp
and [DB1]..[cl].nome=[DB2]..[cl].nome
and [DB1]..[cl].estab=[DB2]..[cl].estab
and [DB1]..[cl].vendm=[DB2]..[cl].vendnm
and [DB1]..[cl].ncont=[DB2]..[cl].ncont
where [DB1]..cl.ncont not in (select ncont from [DB2]..cl)
order by [DB2]..[cl].no
如果您的数据库在同一台服务器上,并且表 2 将列 C1 标记为标识列,那么您通常可以执行简单的 SQL 语句:
INSERT INTO database2..table2(C2, C3)
SELECT C2, C3
FROM database1..table1
ORDER BY C1 ASC
如果您想避免插入重复的行,请尝试以下操作:
INSERT INTO database2..myTable2 (C2, C3)
select t1.c2, t1.c3
FROM [database1]..[table1] t1
LEFT JOIN [database2]..[table2] t2 ON t1.C2 = t2.C2 and t1.C3 = t2.C3
where t2.c2 is null and t2.c3 is null
order by t1.C1
如果您对重复项没问题,那么 Angelo 已经提到了解决方案。
我尝试使用临时表,工作代码如下:
IF (OBJECT_ID('tempdb..#myTable1') IS NOT NULL)
BEGIN
DROP TABLE #myTable1
END;
IF (OBJECT_ID('tempdb..#myTable2') IS NOT NULL)
BEGIN
DROP TABLE #myTable2
END;
CREATE TABLE #myTable1 ([C1] int identity(1,1), [C2] varchar(10), [C3] varchar(10));
CREATE TABLE #myTable2 ([C1] int identity(1,1), [C2] varchar(10), [C3] varchar(10));
Insert INTO #myTable1(C2, C3)
values
('Name 1', 'Address 1')
, ('Name 2', 'Address 2')
, ('Name 3', 'Address 3')
, ('Name 4', 'Address 4')
Insert INTO #myTable2(C2, C3)
values
('Name 11', 'Address 11')
, ('Name 12', 'Address 12')
, ('Name 13', 'Address 13')
, ('Name 14', 'Address 14')
select * from #myTable1
select * from #myTable2
INSERT INTO #myTable2 (C2, C3)
select t1.c2, t1.c3
FROM [#myTable1] t1
LEFT JOIN [#myTable2] t2 ON t1.C2 = t2.C2 and t1.C3 = t2.C3
where t2.c2 is null and t2.c3 is null
order by t1.C1
select * from #myTable2
如果您没有手动添加诸如IDENTITY_INSERT
类的任何设置,则插入的所有记录自然会被授予增量 ID。
正如您所描述的,您在这里遇到的问题是违反PRIMARY KEY 约束的重复记录。
最直接的方法是使用MERGE
语句。 MERGE INTO
Table 2 USING
Table 1. WHEN MATCHED
什么都不做, UNMATCHED
时插入记录
另外,请注意,如果您DELETE
任何记录,则不会为新插入的行回收已删除的 ID。 因此,如果您希望原始 ID 和插入的 ID 连续流动,请检查该表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.