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语句一直在删除它们,为什么? 我怎么能实现他们留下来? 提前谢谢。
答案 0 :(得分: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
的每一面都是互斥的。例如,以&#34;键&#34;开头的任何[Fornavn]
不会以&#34; guest&#34;开头。因此,即使是以&#34;键&#34;开头的[Fornavn]
的行也是如此。尽管你NOT LIKE
,我们会被带回来。大概你想在这个例子中使用AND
而不是OR
。