2

我最近在客户端 API 中发现了一个错误。它根据时间戳发送独特记录的页面。每隔一段时间,它会在上一页的末尾和下一页的开头发送相同的确切记录。

我在假设没有重复的情况下进行操作(毕竟这是一个事件日志)。因此,我做的是纯插入,而不是经历更新或某种“重复”步骤的麻烦。

我的问题是 --- 摆脱这些重复记录的最佳方法是什么,然后让 MS SQL 在插入时悄悄丢弃这些重复记录?它们肯定是在原始文件写入事务之后插入的。这些重复每 10,000 行发生一次 - 所以非常容易记忆的东西会很棒。

记录中唯一不同的部分是“ETL 批次 ID”——其他一切都是相同的。否则,每条记录都应该有一个唯一的“事件 ID”。如果我将此事件 id 设置为唯一索引/键,我可以强制 MS SQL 转储任何重复键吗?还是应用程序会在查询期间抛出错误消息并停止?

4

1 回答 1

0

臭名昭著的IGNORE_DUP_KEY索引选项可以回答您的问题。如果会尽量避免使用它,因为它会以这种非常微妙且难以发现的方式更改插入语义。

不过,它非常有效:http: //blogs.msdn.com/b/craigfr/archive/2008/01/30/maintaining-unique-indexes-with-ignore-dup-key.aspxhttp://web .archive.org/web/20180404165346/http://sqlblog.com:80/blogs/paul_white/archive/2013/02/01/a-creative-use-of-ignore-dup-key.aspx

如果我将此事件 id 设置为唯一索引/键,我可以强制 MS SQL 转储任何重复键吗?还是应用程序会在查询期间抛出错误消息并停止?

是的,插入会失败。这是大多数情况下的首选方式。如果你不能完成这项工作IGNORE_DUP_KEY可能是下一个最好的事情。

于 2015-09-29T22:19:19.570 回答