【问题标题】:Fast batch insert/update with SQL Server 2008 and BCP使用 SQL Server 2008 和 BCP 快速批量插入/更新
【发布时间】:2010-12-02 19:38:16
【问题描述】:

我不是一个优秀的 SQL 程序员,我只有基础知识,但我听说过一些用于快速数据加载的 BCP。我搜索了互联网,它似乎是一个仅限命令行的实用程序,而不是您可以在代码中使用的东西。

问题是,我希望能够在 SQL Server 2008 数据库中进行非常快速的插入和更新。我想在数据库中有一个可以接受的函数:

  • 我要对其执行插入/更新操作的表的名称
  • 我将向其提供数据的列的名称
  • CSV 格式的数据或 SQL 可以快速读取的数据
  • 指示函数应执行插入或更新操作的天气标志

然后,此函数将读取此 CSV 字符串并生成插入/更新表所需的代码。

然后我会在 C# 中编写代码来调用该函数,将表名、列名、序列化为 CSV 字符串的对象列表和插入/更新标志传递给它。

如您所见,这旨在既快速又通用,适用于处理大量数据的任何项目,因此是我公司框架的候选者。

我想对了吗?这是一个好主意吗?我可以使用那个 BCP 的东西吗?它适用于所有情况吗?

如您所见,我需要一些关于这方面的指导...在此先感谢您的帮助!

【问题讨论】:

  • 您要插入/更新多少行?
  • 嗯,通常在 10,000 左右,但有时会达到 500,000 甚至更多。

标签: sql-server bcp


【解决方案1】:

在 C# 中,查看 SQLBulkCopy。这是 SSIS 在后台使用的。

对于真正的bcp/BULK INSERT,您需要可能不允许的批量管理员权限

【讨论】:

  • “你需要批量管理员权限” - 当你为某事构建框架时,最好不要做古怪的安全事情。
  • 很好,我不知道 SqlBulkCopy 类。看起来这对我来说是正确的。谢谢!
  • @Sam:是的,或者可能不允许进入您的商店。亲吻等:-)
  • SqlBulkCopy 需要 DataTable 或 IDataReader 之类的东西,这里有一个 IDataReader 实现的链接以从 IList 中读取:csvreader.com/posts/generic_list_datareader.php
【解决方案2】:

您是否考虑过使用 SQL Server 集成服务 (SSIS)。它旨在完全按照您的描述进行。它非常快。您可以基于事务插入数据。您可以将其设置为按计划运行。还有更多。

【讨论】:

    猜你喜欢
    • 2012-01-10
    • 2019-07-17
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多