我有以下表格:
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。