2016-03-07 32 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)