SQL - 这是允许的吗?

时间:2017-11-10 14:51:21

标签: tsql sql-server-2016

在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”。

1 个答案:

答案 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子句中几乎总是更好。