我正在尝试将批量上传到 SQL 服务器数据库中。源文件有我想删除的重复项,所以我希望该操作会自动上传第一个,然后丢弃其余的。(我设置了一个唯一的键约束)。问题是,一旦尝试重复上传,整个事情就会失败并回滚。有什么办法可以告诉 SQL 继续运行吗?
问问题
10778 次
3 回答
7
尝试将数据批量插入临时表,然后按照@madcolor 的建议选择 DISTINCT 或
INSERT INTO yourTable
SELECT * FROM #tempTable tt
WHERE NOT EXISTS (SELECT 1 FROM youTable yt WHERE yt.id = tt.id)
或 WHERE 子句中的其他字段。
于 2009-09-14T16:28:49.910 回答
1
如果您是通过 SQL Plus 或 DBVis 或 Toad 等 SQL 工具执行此操作,那么我怀疑不是。如果您使用一种语言以编程方式执行此操作,那么您需要分而治之。大概逐行执行更新并捕获每个异常将是一个太长的过程,因此您可以先对整个 SQL 块执行批处理操作,如果失败,则在前半部分执行,如果失败,在上半场的前半场做。以这种方式迭代,直到你有一个成功的块。丢弃该块并对 SQL 的其余部分执行相同的过程。任何违反约束的内容最终都会成为您知道要记录和丢弃的唯一 SQL 语句。这应该尽可能多地导入批量处理,同时仍然丢弃无效行。
于 2009-09-14T16:30:16.333 回答
0
为此使用 SSIS。您可以告诉它跳过重复项。但首先要确保它们是真正的重复项。如果某些列中的数据不同怎么办,您怎么知道要保留哪个更好的记录?
于 2009-09-14T17:25:00.030 回答