SQL导入跳过重复项

时间:2009-09-14 16:19:59

标签: sql duplicates bulkinsert

我正在尝试批量上传到SQL Server数据库。源文件有重复,我想删除,所以我希望操作会自动上传第一个,然后丢弃其余的。 (我设置了一个唯一的键约束)。问题是,在尝试重复上传的那一刻,整个事情都会失败并被回滚。有什么方法可以告诉SQL继续前进吗?

3 个答案:

答案 0 :(得分:7)

尝试将数据批量插入临时表,然后选择SELECT DISTINCT作为@madcolor建议或

INSERT INTO yourTable
SELECT * FROM #tempTable tt
WHERE NOT EXISTS (SELECT 1 FROM youTable yt WHERE yt.id = tt.id)

或WHERE子句中的其他字段。

答案 1 :(得分:1)

如果您通过SQL Plus或DBVis或Toad等SQL工具执行此操作,那么我怀疑不是。如果你用一种语言编程,那么你需要分而治之。假设逐行执行更新并捕获每个异常将是一个过程冗长的过程,因此您可以首先在整个SQL块上执行批处理操作,如果失败,则在前半部分执行,如果失败,在上半场的上半场做到这一点。以这种方式迭代,直到你有一个成功的块。丢弃该块并对SQL的其余部分执行相同的过程。任何违反约束的行为最终都会成为您知道记录和丢弃的唯一SQL语句。这应该导入尽可能多的批量处理,同时仍然抛出无效的行。

答案 2 :(得分:0)

使用SSIS进行此操作。您可以告诉它跳过重复项。但首先要确保它们是真正的重复。如果某些列中的数据不同,您如何知道哪个是更好的记录呢?