2015-08-28 44 views
1

我正在使用查找轉換來比較來自不同服務器的兩個表。我想要在目標不匹配輸出表中添加查找列值,如下所示。例如表1是我的表,我需要檢查不良數據。用於比較兩個表的SSIS查找轉換

ID | Name | Address 
-------------------------- 
1 | Ramya | 01 - London 
-------------------------- 
2 | Vidya | India 

下面是我的查找表

ID | Name | Address 
-------------------------- 
1 | Ramya | London 
-------------------------- 
22 | Vidy | India 

我希望我的目的地(另一個新表),具有無可比擬的行

ID | Name | Address  | LID | LName | LAddress 
--------------------------------------------------------- 
1 | Ramya | 01 - London | NULL | NULL | London 
--------------------------------------------------------- 
22 | Vidy | India  | 2  | Vidya | NULL 

或類似這樣的東西::

有數據
ID | Name | Address  | Mismatch| 
------------------------------------- 
1 | Ramya | 01 - London | Address: London | 
------------------------------------- 
22 | Vidy | India  | ID: 2 and Name: Vidya| 
+0

每個表上是否有主鍵?如果是的話,鑰匙是什麼? – MiguelH

+0

@MiguelH ID是主鍵在表 – Ramya

+1

使用SSIS將遠程表複製到本地服務器,然後在SQL中比較它們可能會更好。 –

回答

0

您能否識別在SSIS中處理之前的不匹配記錄。 下面是一些用於創建示例數據並提供匹配/非匹配記錄的SQL。然後,SSIS可以處理不匹配的記錄,並使用Name進行其他查找以查看這些記錄是否匹配。但是,這可能會有多個比賽!

create table #temp1(
id1 integer,MyName1 varchar(50),MYaddress1 varchar(50) 
) 
create table #temp2(id2 integer,MyName2 varchar(50),MYaddress2 varchar(50) 
) 
insert into #temp1 (id1,Myname1,myaddress1) 
values (1,'Ramya','01 - London') 
insert into #temp1 (id1,Myname1,myaddress1) 
values (2,'Vidya','India') 
select * from #temp1 

insert into #temp2 (id2,Myname2,myaddress2) 
values (1,'Ramya','London') 
insert into #temp2 (id2,Myname2,myaddress2) 
values (22,'Vidya','India') 
select * from #temp2 
; 
with mycte1 as 
(SELECT 
a.id1,a.myName1,a.MyAddress1,b.id2,b.myName2 as LName,b.myAddress2 as LAddress, 
'No Match' as Match 
from #temp1 a left join #temp2 b 
on a.myname1 = b.myname2 and 
a.myAddress1 = b.myAddress2 
where b.myaddress2 is null or b.myname2 is null 
), 
mycte2 as 
(SELECT a.id1,a.myName1,a.MyAddress1,b.id2,b.myNAme2 as LName, 
b.myAddress2 as LAddress,'Match' as Match 
from #temp1 a inner join #temp2 b 
on a.myname1 = b.myname2 and 
a.myAddress1 = b.myAddress2 
) 
select * from mycte2 
union 
select * from mycte1 

drop table #temp1 
drop table #temp2