【发布时间】:2012-03-14 13:06:48
【问题描述】:
我需要将文件中的数据导入 Microsoft SQL Server 数据库。
- 文件结构粗略(字段数量不一致,但所需数据在所有行中都可用)
- 该文件最多可包含 600,000 条记录
- 第一个字段是标识一条记录
数据的导入包含使用新值更新数据库中的现有记录,或者如果找不到记录,则插入新记录。
实现这一目标的最佳方法是什么?
(逐行读取文件,从我的 .NET 应用程序中执行 SELECT 和 UPDATE 或 INSERT 并不能真正让我满意,因为这样它每秒处理大约 35 条记录,这导致几个小时的处理时间...)
第一个选项可能是将 select 和 update/insert 命令组合到一个存储过程中,但这仍然需要很多时间。
有类似 MySQL INSERT ... ON DUPLICATE UPDATE 的东西吗?
是否可以将记录列表/数组(多列)传递给存储过程?
如果是,那是如何实现的?
感谢您的帮助:)
【问题讨论】:
-
您应该查看SQL Server BULK INSERT 以将文件批量加载到 SQL Server 中的临时表中。将数据加载到临时表后,您就可以检测和消除重复数据并将数据填充到“真实”数据表中。
-
您将如何“检测并消除重复项”以将数据填充到目标数据表中?如上所述,重复项应视为
UPDATE语句,所有其他语句应视为INSERT语句 -
谢谢。 MERGE 正是我想要的。您可能希望将此添加为答案,以便我可以将其标记为已接受。
标签: c# sql-server vb.net