ETL SQL Server 2008 – Comment gérer les loggings non-correspondants?

Je suis assez nouveau à ETL. Je travaille sur ce proc et ce qu'il fait, c'est charger les dates de naissance des gens. Ceci est chargé à partir d'une table de faits sur une table différente. Il n'y a pas de key pour les join, toutes les trois tables impliquées. Je vais split le champ Name et faire correspondre avec le nom de split. Cela charge les correspondants, mais ma question est que je dois charger ceux qui ne correspondent pas à une troisième table différente. Comment est-ce que je fais cette logique?

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 

Avec l'instruction MERGE (voir l'exemple D. Insertion des résultats de l'instruction MERGE dans une autre table ), vous devriez pouvoir simplement transformer votre process ETL en une seule instruction.

 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;