c# - 在 SQL Server 中跳过完全相同的记录

标签 c# sql-server primary-key unique-constraint primary-key-design

我有一组文本文件,要通过 C# 中的 SqBulkCopy 导入到 SQL Server 中。有些记录出现在多个记录中,我想跳过这些记录而不是抛出错误并停止。

对于有明确“uniqueID”/主键的情况,一切都很好——我使用了“WITH (IGNORE_DUP_KEY = ON)”,效果很好。

但在这种情况下,无法确定此类 uniqueID,除非将所有字段连接在一起,或者创建一个涉及所有字段的复合键。我试图获得一个唯一的 transactionID 或类似的但没有一个可用。有时记录相同,但字段中的一个数字已更改;在这种情况下,我希望它插入到表中。

我认为可能有比针对所有字段创建 key 更好的方法?如果我这样做了,那就意味着日期、字符串、值等都必须混合在一起才能形成 key 。

查询行并对值进行哈希处理以与输入行的哈希值进行比较是另一种想法,但我敢肯定性能会很糟糕:)

有人对如何最好地做到这一点有建议吗?

谢谢

最佳答案

如果您正在导入,您可以创建一个阶段,通过插入一个与目标表具有相同架构的临时表来删除重复数据,然后执行 SELECT DISTINCT对其进行查询,将此查询的结果插入到最终目标表中。除非您谈论的是数千万行,否则这应该可以正常工作,因为它只需要运行一次。

关于c# - 在 SQL Server 中跳过完全相同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339670/

相关文章:

sql-server - 一个 SQL Server 中的表格模型和多维模型,这怎么可能?

linq-to-sql - SQL 不会在 INSERT 错误时增加主键

cassandra - 在cassandra查询中使用主键和辅助索引的性能

c# - String.Concat(Object) 而不是 String.Concat(String) 的用途

c# - 在与类相同的对象中分配数组

c# - 将60m记录导入SQL的最快方法是什么

mysql - 更新 MySQL 中的唯一键或主键

c# - 在 Application 的部分子类中访问 Properties.Resources/Settings

c# - ASP .NET 5 应用程序部署

java - 从 java 连接 ms sql server 时收到错误