簡體   English   中英

ETL SQL Server 2008-如何處理不匹配的記錄?

[英]ETL SQL Server 2008 - How to handle non-matching records?

我是ETL的新手。 我正在研究此proc,它的作用是加載人們的生日。 這是從事實表加載到另一個表的。 涉及的所有三個表並沒有加入它們的鍵。 我將拆分“名稱”字段,並與拆分的名稱匹配。 這將加載匹配的表,但是我的問題是我必須將不匹配的表加載到另一個第三表。 我該怎么做?

update FactTableEmp F
       set Bdate = S.Birthdate

from   FactTableEmp
       cross apply dbo.split(Name) as u
       join SourceTableEmp S on u.Fname = s.FirstName and u.LName = S.Lastname  

--Is using the one below going to work using the same way above?
u.Fnames != S.FirstName
u.Lname != S.Lastname

使用MERGE語句(請參見示例D.將MERGE語句的結果插入到另一個表中 ),您應該能夠將ETL流程簡化為單個語句。

INSERT dbo.third_table
SELECT Bdate, Name
FROM (
      MERGE dbo.FactTableEmp AS target
      USING (
             SELECT x.Bdate,
                    x.Name,
                    u.FName,
                    u.LName, 
                    s.Birthdate,
                    s.FirstName,
                    s.LastName
             FROM dbo.FactTableEmp x CROSS APPLY dbo.split(x.Name) u
               FULL JOIN dbo.SourceTableEmp s ON u.FName = s.FirstName and u.LName = S.Lastname
      ) AS source
ON (target.Name = source.Name AND source.FName = source.FirstName AND source.LName = source.Lastname)
WHEN MATCHED 
  THEN UPDATE SET target.Bdate = source.Birthdate
WHEN NOT MATCHED BY SOURCE
  THEN UPDATE SET target.Name = target.Name
OUTPUT INSERTED.Bdate, INSERTED.Name) AS Changes(Bdate, Name)
WHERE Bdate IS NULL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM