繁体   English   中英

将一个表中的记录插入到另一个表中增加 id

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM