1

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

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

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

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

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

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

谢谢

4

2 回答 2

5

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

于 2011-06-14T06:07:21.647 回答
2

你可以使用除了:

insert into TargetTable
select fieldlist from SourceTable
except
select fieldlist from TargetTable;
于 2011-06-14T11:34:14.753 回答