我正在建立一个通过各种CSV提要更新大量数据的系统。通常,我只会遍历提要中的每一行,进行选择查询以检查该项目是否已经存在,并根据是否存在来插入/更新该项目。
我觉得这种方法扩展性不强,可能会在较大的提要上重击服务器。我的解决方案是像往常一样遍历所有项目,但将它们存储在内存中。然后,对于每100个左右的项目,对这100个项目进行选择,并获取数据库中匹配的现有项目的列表。然后将插入/更新语句连接在一起,然后将它们运行到数据库中。从本质上讲,这将减少到数据库的行程。
这是否具有足够的可扩展性,是否有将大型Feed导入生产环境的示例教程?
谢谢
看到您使用的是SQL Server 2008,我建议使用以下方法:
查阅MSDN文档和有关如何使用MERGE命令的精彩博客文章。
基本上,您可以在通用条件下(例如,通用主键)在实际数据表和登台表之间创建链接,然后可以定义何时执行操作
您将获得MERGE类似以下内容的声明:
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陈述也可能更复杂,例如
ON
WHEN
WHEN MATCHED AND (some other condition) THEN ......
等等。
MERGE 是SQL Server 2008中一个非常强大且非常有用的新命令-如果可以的话,请使用它!