2012-11-08 60 views
2

我對ETL相當陌生。我正在研究這個過程,它所做的是加載人的生日。這是從事實表加載到不同的表上。所有涉及的三個表格都沒有關鍵參與。我將拆分名稱字段並與拆分名稱匹配。這加載匹配的,但我的問題是我必須加載不匹配的不同的第三個表。我如何做這個邏輯?ETL SQL Server 2008 - 如何處理不匹配的記錄?

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 

回答

1

隨着MERGE聲明(見例如D.插入MERGE語句的結果到另一個表),你應該能夠簡單地ETL處理成一個單獨的語句。

0
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;