【问题标题】:Import data into database将数据导入数据库
【发布时间】: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


【解决方案1】:

您应该查看SQL Server BULK INSERT 以将文件批量加载到 SQL Server 中的临时表中。

将数据加载到临时表后,您可以使用SQL Server 2008 MERGE 语句插入/更新(“upsert”)您的实际数据表。这正是它旨在解决的场景......

【讨论】:

    【解决方案2】:

    创建 SSIS 就是为了做到这一点。 Here 就是一个例子。

    【讨论】:

    • 我还没有使用过 SSIS。导入应该自动运行(无需用户交互)并且不依赖于开发环境。 SSIS 有哪些可能?
    • 如果您需要多次运行它,请构建包并将其添加到计划作业中。建议你试一试,这是一项非常好的技术
    猜你喜欢
    • 2015-05-21
    • 2010-11-06
    • 2011-06-24
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2020-02-27
    相关资源
    最近更新 更多