MSSQL Слияние, когда не совпадает, ТО вставьте идентификатор из источника - PullRequest
0 голосов
/ 27 июня 2019

У меня проблема с MERGE Statement.Я сравниваю 2 таблицы.КОГДА ОБНОВЛЕНО ОБНОВЛЕНИЕ работает как талисман, но есть проблема с предложением КОГДА НЕ СООТВЕТСТВОВАТЬ, ЧЕМ ВСТАВИТЬ.Я хочу вставить строки в таблицу daSRC (исходную), но мне нужно иметь тот же da_DocId, что и в исходной таблице.

Это упрощенный запрос.

MERGE DocAnalytical daSRC
USING  (
    select 
    da_DaId, da_DocId, da_DelId, 
    FROM DocAnalytical dad
    JOIN DocElems del on dad.da_DelID=del.Del_ID 
) as dest
ON dest.da_DaId=daSRC.da_DaId --i know it's identity but normal its more complex clause
WHEN MATCHED THEN 
UPDATE SET 
da_DocId=dadSRC.da_DocId, da_DelId=dadSRC.da_DelId

WHEN NOT MATCHED THEN 
INSERT (da_DocId, da_DelId, 
VALUES(daSRC.da_DocId, da_DelId, -- daSRC not available
);

Желаемый результат: До

da_DaID     da_DocId    da_DelId     da_DaId (identity)
----------- ----------- -----------
162         5160        98
163         5160        98
164         5160        99

Несоответствующая строка

da_DaID     da_DocId    da_DelId
----------- ----------- -----------
300         5300        100 

После

da_DaID     da_DocId    da_DelId
----------- ----------- -----------
162         5160        98
163         5160        98
164         5160        99
165         5160        100   << dad_DocId from daSRC (source)
...