在SQL Server 2016中,我有一个合并语句。 WHERE子句在WHEN MATCHED语句之后是有效还是有其他方法可以执行此操作?
MERGE dbo.MyTable AS TARGET
USING (select * from dbo.StageTable)
WHEN MATCHED THEN
UPDATED SET target.[Col1] = source.[Col1] WHERE [Col1] <> "StartTime"
此外,是否可以使用SELECT语句而不是source.Column ....我遇到的真正问题是我不知道我需要的数据列在StageTable上。 ..我唯一知道的是它在列中的某处包含文本“StartTime”。
答案 0 :(得分:0)
我不确定MATCH
是否在没有ON
子句的情况下工作,可能是通过使用两个表的主键匹配行,但您可能更好地使用更明确的语法。
以下MERGE
会尝试匹配Id
中具有相同值的所有行,但前提是Col1
中的值不是&# 34;开始时间&#34;
MERGE dbo.MyTable AS TARGET
USING (select * from dbo.StageTable) AS SOURCE
ON (TARGET.Id = SOURCE.Id AND SOURCE.Col1 <> "StartTime")
WHEN MATCHED
UPDATED SET TARGET.Col1 = SOURCE.Col1
这显然意味着您需要提供Id
列,无论如何都应该存在于每个表中。
将匹配逻辑放在ON子句中几乎总是更好。