sql-server – 跳过/忽略插入的重复行

前端之家收集整理的这篇文章主要介绍了sql-server – 跳过/忽略插入的重复行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下表格:

DataValue@H_502_3@

DateStamp    ItemId   Value
----------   ------   -----
2012-05-22   1        6541
2012-05-22   2        12321
2012-05-21   3        32

tmp_holding_DataValue@H_502_3@

DateStamp    ItemId   Value
----------   ------   -----
2012-05-22   1        6541
2012-05-22   4        87
2012-05-21   5        234

DateStamp和ItemId是主键列。@H_502_3@

我正在做一个插入,全天候定期运行(在存储过程中):@H_502_3@

insert into DataValue(DateStamp,ItemId,Value)
select DateStamp,Value from tmp_holding_DataValue;

这将数据从保持表(tmp_holding_DataValue)移动到主数据表(DataValue)中。夹持表然后被截断。@H_502_3@

问题是,如在示例中,保持表可以包含主表中已经存在的项。由于密钥不允许重复值,因此过程将失败。@H_502_3@

一个选项是在insert proc上放置一个where子句,但主数据表有1000万行,这可能需要很长时间。@H_502_3@

有没有其他方法可以让程序跳过/忽略它们尝试插入的重复项?@H_502_3@

解决方法

INSERT dbo.DataValue(DateStamp,Value)
SELECT DateStamp,Value 
FROM dbo.tmp_holding_DataValue AS t
WHERE NOT EXISTS (SELECT 1 FROM dbo.DataValue AS d
WHERE DateStamp = t.DateStamp
AND ItemId = t.ItemId);
原文链接:https://www.f2er.com/mssql/84679.html

猜你在找的MsSQL相关文章