2016-04-19 5 views
1

В MERGE заявление работает в последний раздел «КОГДА НЕ Немаловажен ИСТОЧНИК» Здесь, за исключением является утверждение:SQL MERGE заявление удаление исключений

MERGE INTO [SQDKRTV96].[MERGETEST].[dbo].[users] T 
USING [MERGETEST].[dbo].[PS_VIEW] S 
ON S.[NAME_AC] = T.[Initialer] 
WHEN MATCHED AND ( 
     T.[Løn nummer] <> S.[EMPLID] OR 
     T.[Fornavn] <> S.[FIRST_NAME] OR 
     T.[Efternavn] <> S.[LAST_NAME] 
     ) 
THEN UPDATE SET 
    T.[Løn nummer] = S.[EMPLID], 
    T.[Fornavn] = S.[FIRST_NAME], 
    T.[Efternavn] = S.[LAST_NAME] 
WHEN NOT MATCHED BY TARGET 
THEN INSERT (
    [Løn Nummer], 
    [Initialer], 
    [Fornavn], 
    [Efternavn] 
    ) VALUES (
    S.[EMPLID], 
    S.[NAME_AC], 
    S.[FIRST_NAME], 
    S.[LAST_NAME] 
    ) 
WHEN NOT MATCHED BY SOURCE AND (T.[Fornavn] NOT LIKE 'key%' OR T.[Fornavn] NOT LIKE 'guest%' OR T.[Fornavn] NOT LIKE 'udlån%' OR T.[Fornavn] NOT LIKE 'vikar%' OR T.[Fornavn] NOT LIKE 'test%') 
THEN DELETE; 

Я хочу, чтобы оператор MERGE не удалять записи с NOT LIKE для них определено ключевое слово. Но эти утверждения MERGE продолжают их удалять, почему? Как я могу добиться, чтобы они остались? Спасибо заранее.

+3

Я думаю, что вы должны использовать оператор И вместо ИЛИ между НЕ ЛЮБВИ – CPMunich

ответ

3

Предикат T.[Fornavn] NOT LIKE 'key%' OR T.[Fornavn] NOT LIKE 'guest%' OR T.[Fornavn] NOT LIKE 'udlån%' OR T.[Fornavn] NOT LIKE 'vikar%' OR T.[Fornavn] NOT LIKE 'test%' не будет фильтровать ни одной строки, поскольку каждая сторона OR является взаимоисключающей. Например, любой [Fornavn], начинающийся с «ключа», не начинается с «гостя». Таким образом, даже строки с [Fornavn], начиная с «ключа», будут возвращены, несмотря на ваш NOT LIKE. Предположительно, вы хотите использовать AND, а не OR в этом случае.

+0

Спасибо. Отличное объяснение. – Coloplast