2017-10-27 18 views
0

私はDMレイヤーの2つのテーブルを比較しようとしていますが、2つの異なるデータベース(古いデータと新しいデータベース、データの一貫性/比較データ分析) 2つのテーブルを比較するには、EDWとMDM/Mapsレイヤーに参加する必要があります。私はコンテンツのマッチのために列と行を比較する必要があり、私は一致しないコンテンツを何らかの方法で出力したい。あなたはこれをどのように進めますか?SQL Serverの2つのテーブルをデータベースとレイヤーで比較する

今まで私はこの完全外部結合を持っています。 http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx

しかし、私はFULL OUTER JOINの代わりにUNION ALLを働かせることはできません。あなたはどのように進んでいくのでしょうか、あなたはすべてUNION ALLを使っていますか?

select * from (
select dm.*, mdm.ProductionSystem, mdm.SchoolIdent 
from DM_OLD.dbo.DimSchool dm 
inner join EDW_OLD.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join MDM_OLD.dbo.School mdm on edw.SYS_BusinessKeyFK = mdm.SYS_BusinessKeyID 
) a 
full outer join 
(
select dm.*, maps.ProductionSystem, maps.SchoolIdent 
from dm.dbo.DimSchool dm 
inner join edw.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join edw.maps.School maps on edw.SYS_BusinessKeyFK = maps.SYS_BusinessKeyID 
) b ON a.ProductionSystem = b.ProductionSystem AND a.SchoolIdent = b.SchoolIdent 
+0

私は最近、同じような仕事に直面しました。私はSSISを使用し、メモリ内の比較を世話し、異なるフィールドを出すC#ソースコンポーネントを作成することに決めました... – Tyron78

答えて

0

このクエリはあなたにNEWでOLDに存在し、ミスしているすべての行を示しています。

select dm.*, mdm.ProductionSystem, mdm.SchoolIdent 
from DM_OLD.dbo.DimSchool dm 
inner join EDW_OLD.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join MDM_OLD.dbo.School mdm on edw.SYS_BusinessKeyFK = mdm.SYS_BusinessKeyID 

except 

select dm.*, maps.ProductionSystem, maps.SchoolIdent 
from dm.dbo.DimSchool dm 
inner join edw.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join edw.maps.School maps on edw.SYS_BusinessKeyFK = maps.SYS_BusinessKeyID 

を、これはあなたが新旧でのミスに持っているものを紹介します:

select dm.*, maps.ProductionSystem, maps.SchoolIdent 
from dm.dbo.DimSchool dm 
inner join edw.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join edw.maps.School maps on edw.SYS_BusinessKeyFK = maps.SYS_BusinessKeyID 

except 

select dm.*, mdm.ProductionSystem, mdm.SchoolIdent 
from DM_OLD.dbo.DimSchool dm 
inner join EDW_OLD.dbo.School edw on dm.EdwSchoolId = edw.SchoolID 
inner join MDM_OLD.dbo.School mdm on edw.SYS_BusinessKeyFK = mdm.SYS_BusinessKeyID 
+0

@sepudicそして、私は何とかUNION ALLにする必要がありますか? – Klelund

+0

あなたの目的は「すべての費用をかけて組合を使いましょうか」、あるいは2つのテーブルを比較することですか? – sepupic

+0

@sepucicよりスマートな解決策である場合にのみ。私は、異なる行の内容が古いdbと新しいdbのテーブルで一致するかどうかをテストしたい。 – Klelund

関連する問題