在SQL Server 2008中插入/更新大量数据的最佳做法

前端之家收集整理的这篇文章主要介绍了在SQL Server 2008中插入/更新大量数据的最佳做法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在建立一个通过各种CSV供稿更新大量数据的系统.通常情况下,我会循环访问Feed中的每一行,执行select查询以检查项目是否已存在,并根据项目是否存在插入/更新项目.

我觉得这种方法不是很可扩展,并且可以将服务器敲击更大的馈送.我的解决方案是正常地循环显示项目,但将其存储在内存中.然后,对于每100个左右的项目,对这100个项目进行选择,并获取匹配的数据库中现有项目的列表.然后将insert / update语句连接在一起并将它们运行到数据库中.这将大大减少数据库的访问次数.

这是一个可扩展的足够的解决方案,有没有关于将大型Feed导入生产环境的示例教程?

谢谢

解决方法

看到你正在使用sql Server 2008,我会推荐这种方法

>首先将CSV文件批量拷贝到登台表中
>使用MERGE命令从该登台表更新您的目标表

查看MSDN docsgreat blog post如何使用MERGE命令.

基本上,您可以根据常用条件(例如常用主键)在实际数据表和登台表之间创建一个链接,然后您可以定义何时执行

行匹配,例如该行存在于源表和目标表中 – >通常你会更新一些字段,或者一起忽略它们
>源中的行不存在于目标 – >通常是INSERT的情况

你会有一个这样的MERGE语句:

MERGE TargetTable AS t
USING SourceTable AS src
ON t.PrimaryKey = src.PrimaryKey

WHEN NOT MATCHED THEN
  INSERT (list OF fields)
  VALUES (list OF values)

WHEN MATCHED THEN
  UPDATE
    SET (list OF SET statements)
;

当然,如果需要,ON子句可以更多地涉及.当然,你的WHEN语句也可能更复杂,例如

WHEN MATCHED AND (some other condition) THEN ......

等等.

MERGE是sql Server 2008中非常强大和非常有用的新命令 – 使用它,如果可以的话!

猜你在找的MsSQL相关文章