【发布时间】:2016-12-14 10:16:16
【问题描述】:
我正在使用 MERGE 语句在我的数据库中插入/更新记录。
我的源表包含三列,用于确定是否需要插入或更新记录。我的问题出现在 ON 子句中——目标表和源表使用三列连接,但是如何连接有很多变化。 (见下例)
我知道可以使用 AND / OR 运算符来实现这一点,但这会变得混乱且难以维护。我想知道是否有更有效的方法?
我的代码示例如下:
MERGE Target_Table as t
USING (select @param1, @param2, @param3)
AS s (col1, col2, col3)
ON (t.col1 = s.col1
AND t.col2 = s.col2
AND t.col3 = s.col3)
OR (t.col1 = s.col2
AND t.col2 = s.col1
AND t.col3 = s.col3)
WHEN
MATCHED
THEN […update…]
WHEN
NOT
MATCHED
THEN […insert…]
提前致谢!
【问题讨论】:
-
根据您为我列出的内容很难判断。任何列可以匹配另一个表中的任何其他列吗?恕我直言,可读性几乎与性能一样重要。尽管我确定您知道,由于您使用多个 AND / OR 运算符,请注意记住 SQL Server 在评估这些运算符时的优先级。 msdn.microsoft.com/en-us/library/ms190276.aspx
-
您好,感谢您的回复。是的,我在源表中使用的三个变量可以以任意顺序匹配目标表中的三列中的任何一列。此外,我将示例限制为三个变量,但最多可以有六个。我想看看是否有更好的方法来评估数据并查看是否在任何列中找到变量
-
所有参数是唯一的还是这些值可以相互相等?例如,param1 和 param2 可以都是“1”吗?
标签: sql sql-server stored-procedures merge