【发布时间】:2017-11-30 22:13:35
【问题描述】:
希望这对比我聪明的你们来说是一件容易的事。我正在尝试从另一个匹配表执行插入到表中,但我只想在该行不存在时插入。行中的某些值(如果存在)可能会更改。没关系。
我在想如果有两列在插入时匹配,那么不要插入并保持原样。如果这两列不匹配,则插入该行。我已经查看了合并,并且还插入了 EXCEPT。这段代码可以工作:但这不是我需要的。
INSERT INTO LotDetail
SELECT UID, LotKey, SerialNo, TypeID, HotWeight, YieldGradKey, PeltGrade,
WeightRange, MarketValue, PremiumDiscount, PeltValue, OffalValue,
PricingKey, USDAGrade, [Timestamp] FROM LotDetail
EXCEPT
SELECT UID, LotKey, SerialNo, TypeID, HotWeight, YieldGradKey, PeltGrade,
WeightRange, MarketValue, PremiumDiscount, PeltValue, OffalValue,
PricingKey, USDAGrade, [Timestamp] FROM LotDetail_STAGING
上面代码的问题是我必须匹配所有列,否则它会告诉我表定义不匹配。我只想将时间戳和序列号作为标识符。我不想匹配其他字段,因为它们可能会改变。
问题是,如果 LotDetail 表中已经存在记录并且“hotweight”或“marketvalue”已更改,我想保留这些更改而不覆盖记录。我只是想仅在“serialno”和“timestamp”不存在时插入。这些字段无法更改。有什么想法吗?
【问题讨论】:
标签: sql sql-server merge sql-server-2012 insert