TSQL - вставьте или обновите значения из SourceTable в TargetTable (удаление не требуется) - PullRequest
1 голос
/ 29 июня 2011

Я хочу перенести все данные из SourceTable в TargetTable, вставив или обновив соответствующим образом. Мне не нужно удалять записи из TargetTable, даже если их нет в SourceTable.

Это то, что я имею до сих пор. Является ли команда MERGE наиболее подходящим подходом для этого? Я посмотрел на некоторый пример, но не совсем уверен, как это сделать.

Мое текущее решение усекает всю таблицу, а затем вставляет данные. С тех пор я понял, что мне нужно сохранить значения PK для значений, которые существовали ранее в TargetTable. Как изменить это значение на INsert или обновить в зависимости от того, существует ли AssociatedRefId в столбце PublicRefId таблицы TargetTable?

-- Truncate lancrm01sql's Baseline Official table
        TRUNCATE TABLE [TargetTable]

        -- Populate table
        INSERT INTO [TargetTable] 
        (PublicRefId 
        ,FamilyName 
        ,GivenName
        )
        SELECT 
            AssociatedRefId 
        ,   lastname 
        ,   firstname 

        FROM 
            #TempSourceTable

1 Ответ

2 голосов
/ 29 июня 2011
MERGE TargetTable AS T
USING #TempSourceTable AS S
ON (t.PublicRefId =  s.AssociatedRefId)
WHEN NOT MATCHED BY TARGET
    THEN INSERT(PublicRefId, FamilyName, GivenName) VALUES (S.AssociatedRefId, S.lastname, S.firstname)
WHEN MATCHED 
    THEN UPDATE SET T.FamilyName = S.lastname, T.GivenName = S.firstName

Эта статья дает довольно хорошее объяснение по использованию MERGE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...