mar*_*vpc 13 sql csv feeds sql-update sql-insert
我正在建立一个通过各种CSV Feed更新大量数据的系统.通常我会循环遍历Feed中的每一行,执行select查询以检查项目是否已存在,并根据项目是否存在插入/更新项目.
我觉得这种方法的可扩展性不高,可能会使服务器在更大的源上运行.我的解决方案是正常循环项目,但将它们存储在内存中.然后,对于每100个左右的项目,对这100个项目进行选择,并获得数据库中匹配的现有项目列表.然后将insert/update语句连接在一起并将它们运行到数据库中.这基本上可以减少到数据库的行程.
这是一个可扩展的解决方案吗?是否有关于将大型Feed导入生产环境的示例教程?
谢谢
mar*_*c_s 14
看到您正在使用SQL Server 2008,我建议使用此方法:
查看MSDN文档和一篇关于如何使用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)
;
Run Code Online (Sandbox Code Playgroud)
当然,ON如果需要,该条款可以更多地涉及.当然,你的WHEN陈述也可能更复杂,例如
WHEN MATCHED AND (some other condition) THEN ......
Run Code Online (Sandbox Code Playgroud)
等等.
MERGE 是SQL Server 2008中一个非常强大且非常有用的新命令 - 如果可以,请使用它!
| 归档时间: |
|
| 查看次数: |
20693 次 |
| 最近记录: |