2016-07-25 1 views
0

Я пытаюсь ввести данные претензии поэтапно. Я сопоставляю источник и цель на System (varchar) и ClaimNum (varchar), с хэшем других столбцов, чтобы проверить изменения.Условия слияния SQL Server 2008 Условия множественных совпадений

У меня есть слияние заявление (упрощенный):

MERGE target 
USING source ON target.System = source.System 
      AND target.ClaimNum = source.ClaimNum 

WHEN MATCHED AND target.HashValue <> source.HashValue 
THEN {update claim record data} 

WHEN MATCHED AND target.HashValue = source.HashValue 
THEN {update claim record as "checked"} 

WHEN NOT MATCHED 
THEN {insert new claim record} 

Однако, я не могу иметь 2 совпавшие условия. Как еще я могу выполнить это с помощью оператора слияния?

Это используется в SQL Server 2008.

ответ

0

Вы можете использовать CASE или IIF (SQL Server 2012), чтобы добавить пользовательскую логику:

MERGE target 
USING source 
    ON target.System = source.System 
AND target.ClaimNum = source.ClaimNum 
WHEN MATCHED THEN 
    UPDATE SET column_name = 
      CASE WHEN target.HashValue = source.HashValue THEN ... 
       ELSE ... 
      END 
WHEN NOT MATCHED THEN {insert new claim record} 

EDIT:

Если это только UPDATE, вы можете использовать несколько условий/установить одинаковое значение для пропуска:

... 
UPDATE SET column_name1 = 
      CASE WHEN condition1 THEN ... 
       ELSE column_name1 
      END 
      ,column_name2 = 
      CASE WHEN condition1 THEN ... 
        WHEN condition2 THEN ... 
        ELSE column_name2 
      END 
      ,... 

Примечание:

Если источник/цель HashValue обнуляемым вы должны обрабатывать его с помощью COALESCE/ISNULL/adding OR target.HashValue IS NULL.... Операторы сравнения не работают с NULL.

+0

Спасибо за ваш ответ; однако у меня есть несколько столбцов, на которые влияет оператор соответствия. Например, мне нужно иметь форму case для условия совпадения, вы знаете? – wk4997

+0

@ wk4997 Затем вы используете несколько операторов case, и если вы не хотите их обновлять, установите только одно значение 'col_name = CASE WHEN condition THEN ... ELSE col_name END' плюс вы можете иметь разные условия для каждого столбца – lad2025

Смежные вопросы