如何为删除的 SQL Server 合并语句添加 where 条件
Posted
技术标签:
【中文标题】如何为删除的 SQL Server 合并语句添加 where 条件【英文标题】:How to adding a where condition to SQL Server Merge statement for Deletes 【发布时间】:2014-09-29 09:31:57 【问题描述】:MERGE DestinationTable AS D
USING @SourceTable AS S
ON D.Alternate_ID = S._ID
WHEN MATCHED AND
(
D.Candidate_ID <> S.Candidate_ID OR ISNULL(D.Vacancy_ID,'') <> S.Vacancy_ID
)
THEN
UPDATE SET
D.FName = S.FName,
D.Department = S.Department,
WHEN NOT MATCHED BY TARGET
THEN INSERT
(
Alternate_ID,
FName,
Department
)
VALUES
(
S.ID,
S.FName,
S.Department
)
WHEN NOT MATCHED BY SOURCE
--How to add a where clause to the delete statement here
THEN DELETE; --E.g WHERE D.Department <> 'HR'
我正在使用上面的 Merge 语句删除 DestinationTable 中的记录(如果它们已从源中删除)
有谁知道如何在 Delete 语句中添加 WHERE 条件?我只想从 ColA 等于特定常量字符串的目标中删除。
【问题讨论】:
根据sqlstudies.com/2013/09/30/…,您可以添加到WHEN NOT MATCHED BY SOURCE AND D.Department 'HR' THEN DELETE 【参考方案1】:是的,请参阅 MSDN article 以获取 MERGE
。
[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
THEN <merge_matched> ] [ ...n ]
以下是应用于查询的NOT MATCHED BY SOURCE
部分的文档(假设 CoIA 是目标表中的一列):
...
WHEN NOT MATCHED BY SOURCE AND D.CoIA = 'YourValue' THEN
DELETE;
但是,请务必注意以下几点:
MERGE 语句最多可以有两个 WHEN NOT MATCHED BY SOURCE 条款。如果指定了两个子句,则第一个子句必须是 伴随着一个 AND
子句。对于任何给定的 行,第二个 WHEN NOT MATCHED BY SOURCE 子句仅适用于 第一个不是。如果有两个 WHEN NOT MATCHED BY SOURCE 子句, 那么必须指定一个 UPDATE 操作,并且必须指定一个 DELETE 行动。 只能引用目标表中的列 。
【讨论】:
以上是关于如何为删除的 SQL Server 合并语句添加 where 条件的主要内容,如果未能解决你的问题,请参考以下文章