在MERGE sql server的ON搜索条件中组合两列

时间:2016-04-28 14:38:04

标签: sql-server sql-server-2012

我有两个日期列[START DATE][END DATE],我想只插入日期不在任一列中的记录。这就是我的逻辑:

MERGE TABLE_A                                      AS Target
USING (SELECT DISTINCT * FROM TABLE_B)             AS Source
ON (SELECT Target.[START DATE] + Target.[END DATE] AS Target.[COMPAREDATE] = 
    SELECT Source.[START DATE] + Source.[END DATE] AS Source.[COMPAREDATE]) 
WHEN NOT MATCHED THEN
INSERT ([DATE ADDED], [END DATE], ...)
VALUES (Source.[DATE ADDED], Source.[END DATE], ...);

我也尝试了下面的代码,但它继续插入重复项:

ON (Target.[START DATE] = Source.[START DATE] AND Target.[END DATE] = Source.[END DATE])

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

此代码已关闭:

ON (Target.[START DATE] = Source.[START DATE] AND Target.[END DATE] = Source.[END DATE])

它说,“如果StartDate和EndDate都匹配,那么行匹配”。

如果你想说“如果StartDates匹配或者EndDates匹配,那么行匹配”,那么你应该这样做:

ON (Target.[START DATE] = Source.[START DATE] OR Target.[END DATE] = Source.[END DATE])