MERGE - 有条件的“当匹配然后更新”
Posted
技术标签:
【中文标题】MERGE - 有条件的“当匹配然后更新”【英文标题】:MERGE - conditional "WHEN MATCHED THEN UPDATE" 【发布时间】:2012-12-05 03:27:02 【问题描述】:下图中的高亮部分显示了我想要实现的逻辑。我意识到语法不正确。
有没有办法在 MERGE 语句中仅当目标表中的某一列的值为 NULL 且源表中的相应值不为空时,才有条件地更新记录?
你会如何建议重写这个?
MERGE dbo.input_311 AS [t]
USING dbo.input_311_staging AS [s]
ON ([t].[unique key] = [s].[unique key])
WHEN NOT MATCHED BY TARGET
THEN INSERT(t.[Created Date]) VALUES(s.[Created Date])
WHEN MATCHED
THEN UPDATE SET(t.[Created Date] = s.[Created Date]
WHERE s.[Created Date] IS NOT NULL
AND t.[Created Date] IS NULL)
OUTPUT deleted.*, $action, inserted.*;
GO
【问题讨论】:
此代码应格式化为代码,而不是图像 【参考方案1】:您也许可以使用When Matched And (s.[Created Date] Is Not Null And t.[Created Date] Is Null) Then Update ...
。
【讨论】:
+1,完整示例请参见此处的示例 B:technet.microsoft.com/en-us/library/bb510625.aspx 感谢@Laurence 的回答。 我发布了follow-up question。我做了一个单独的帖子,所以我可以承认这个答案是正确的,以及我下一个问题的答案(如果我有幸得到一个) 更新了来自@JeffOgata 示例的直接链接:docs.microsoft.com/en-us/sql/t-sql/statements/…以上是关于MERGE - 有条件的“当匹配然后更新”的主要内容,如果未能解决你的问题,请参考以下文章