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

我有以下表格:

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

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...