Merge WHEN MATCHED THEN и WHEN NOT MATCHED BY SOURCE THEN

Tsql теория > Merge WHEN MATCHED THEN и WHEN NOT MATCHED BY SOURCE THEN
25.11.2013 11:39:39



Статья:

MERGE [tblСКД_Персоны] AS target
    USING (SELECT h.Имя,h.Фамилия,h.Отчество,h.Orion_УИ ,h2.Сотрудник_ID  as Сотрудник_ID
             from tblСКД_Персоны_TMP h (nolock)
    LEFT JOIN tblОргСтр_Сотрудники h2 (nolock) ON h2.ТабельныйНомер=h.ТабельныйНомер

 
    
) AS source
    ON (target.[Orion_УИ] = source.[Orion_УИ] )
  WHEN MATCHED THEN  -- в источнике и получателе совпадает по target.[Orion_УИ] = source.[Orion_УИ]
        UPDATE SET
        [Orion_УИ]=source.[Orion_УИ],
        [Имя]=source.[Имя],
        [Фамилия]=source.[Фамилия],
        [Отчество]=source.[Отчество],
        [Сотрудник_ID]=source.[Сотрудник_ID]

 WHEN NOT MATCHED THEN  -- если есть в источнике, но нету  в таблице получателя
     INSERT ([Orion_УИ],[УдаленоВИсточнике],Имя,Фамилия,Отчество,Сотрудник_ID)
     VALUES (source.[Orion_УИ],0,source.Имя,source.Фамилия,source.Отчество,source.Сотрудник_ID)
     
       WHEN NOT MATCHED BY SOURCE THEN -- если нет в источнике, но есть в таблице получателя
     UPDATE SET [УдаленоВИсточнике]=1;