2016-03-07 69 views
1

我有2个数据库在同一台服务器。 DB1具有名为E1的表,而DB2具有名为E1的表。用新的ID复制记录

E1

ID名称

1 A 
2 B 
3 C 

E2

ID Name 
1 A 
2 C 
3 D 

我想复制表E1,而不是在表E2中存在新的 “ID” 的名字。 所以E2将

E2

ID Name 
1 A 
2 C 
3 D 
4 B 

我的查询是:

SET IDENTITY_INSERT [TEST_DB].[dbo].[E1] ON 
INSERT INTO [TEST_DB].[dbo].[E1](ID,Name) 
    SELECT ID,Name FROM [TestDB].[dbo].[E1]AS a 
    WHERE NOT EXISTS( 
    SELECT a.ID , a.Name FROM [TEST_DB].[dbo].[E1] AS b WHERE a.ID = b.ID and a.Name = b.Name) 
SET IDENTITY_INSERT [TEST_DB].[dbo].[E1] off 
+1

做它的ID列自动递增? –

+0

是的,它是自动增量。 – mshkl

+0

你只需要选择没有ID的名称 –

回答

0
insert into e2 (name) 
    select name from e1 
    where name not in (select name from e2 
         where name is not null) 

假设ID是自动递增列。

0
insert into e2 (id, name) 
values ((select max(id) from e2)+1, (select name from e1 where name not in (select name from e2) 

id自动递增。

+0

如果e2中没有数据会怎么样? – sagi

+0

怎么样?然后它会给出一个错误,不会做任何事情。 –

+0

你认为OP想要一个可以给出错误的查询吗?你不应该发布可能会导致错误的答案。 – sagi

0

如果我理解正确,你可以加入表格并从E1中检查你没有的E2,并只插入那些...正如你所说的ID是自动增量...只需选择你需要的东西LEFT JOIN

if object_ID('tempdb..#E1') IS NOT NULL DROP TABLE #E1 
create table #E1 (Name nvarchar(10)) 
insert into #E1 (Name) values ('A'), ('B'), ('C') 

if object_ID('tempdb..#E2') IS NOT NULL DROP TABLE #E2 
create table #E2 (Name nvarchar(10)) 
insert into #E2 (Name) values ('A'), ('C'), ('D') 

Select * from #E2 

Insert into #E2 (Name) 
Select e1.Name from #E1 e1 
LEFT JOIN #E2 e2 on e1.Name = e2.Name 
where e2.Name IS NULL 

Select * from #E2 
0
INSERT INTO [dbo].[E2] (Name) 
SELECT A.Name FROM [dbo].[E1] A 
WHERE A.Name NOT IN (SELECT B.Name FROM [dbo].[E2] B)