加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:06:13 所属栏目:MsSql教程 来源:网络整理
导读:我有以下表格: DataValue DateStamp ItemId Value---------- ------ -----2012-05-22 1 65412012-05-22 2 123212012-05-21 3 32 tmp_holding_DataValue DateStamp ItemId Value---------- ------ -----2012-05-22 1 65412012-05-22 4 872012-05-21 5 234 Dat
我有以下表格:

DataValue

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

tmp_holding_DataValue

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

DateStamp和ItemId是主键列。

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

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

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

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

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

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

解决方法

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读