【问题标题】:Most efficent way to merge data into SQL Server database from ODBC source将数据从 ODBC 源合并到 SQL Server 数据库的最有效方法
【发布时间】:2010-10-29 09:23:41
【问题描述】:

我需要不断地将数据从 ODBC 数据源合并(更新/删除)到 SQL Server 2008 数据库(行数从 1 行到 100000 行不等)

您会推荐什么作为最有效的方法(使用 .net 3.5):

  1. 在临时表中使用SqlBulkCopy,然后使用 Merge 命令以临时表为源调用存储过程。
  2. 调用具有表值参数的存储过程,其中数据作为参数 (SqlDbType.Structured) 发送,表参数用作合并命令的来源。 通过表参数发送的数据是否以批量操作发送到服务器?在超过 1000 行的情况下使用它是否可行且高效?
  3. 使用合并命令调用存储过程,该命令使用OpenRowset 批量从 ODBC 源获取数据(使用链接服务器?)
  4. 任何其他方式。

谢谢!

【问题讨论】:

  • 我会倾向于一个人,但我会服从其他人。不妨问问你周围的人,看看是否有任何集成服务方面的专业知识。
  • 如果您使用临时表,请暂时使用 REAL 表,而不是 #Temp 或 @tabelvar 表。如果发生某些事情(断电、重启等),您不希望部分合并的记录被丢弃。
  • 我正在考虑真实与临时表,您的观点很有帮助。

标签: .net sql sql-server sql-server-2008 odbc


【解决方案1】:

这种类型取决于导入的触发器是什么。如果要每 10 分钟安排一次,或者我会使用选项 1 或创建一个与选项 1 执行相同操作的 SSIS 包。JNK 是正确的,最好使用永久表,它将避免分配如果需要,它将允许您从中间开始处理。

在 SSIS 中,您的工作流程如下所示:

  • 截断临时表
  • 创建数据流任务以将数据从源导入临时表,并在需要时处理错误
  • 调用存储过程合并数据

创建包后,您可以通过 SQL 代理对其进行调度。确保使用在包属性上设置的 DontSaveSensitiveData 选项创建包,以免出现奇怪的加密错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2016-01-15
    • 2014-04-27
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多