我正在尝试找出设计使用SQL Server后端数据的C#应用程序的最佳方法。
我的应用程序需要定期从应用程序中的循环中每次更新55K行。在进行更新之前,需要检查是否存在要更新的记录。
如果存在,则更新一个字段。 如果不是,则执行4个字段的插入。
要更新的表有600K行。
答案 0 :(得分:1)
您可以使用SqlBulkCopy上传到临时表,然后让SQL Server作业进行合并。
答案 1 :(得分:0)
您应该尽量避免“从循环中每次更新55K行”。那将是非常缓慢的。
相反,尝试找到批量更新的方法(一次n个)。查看SQL Server table value parameters作为将一组数据发送到存储过程的方法。
以下是有关使用TVP更新多行的文章:http://www.sqlmag.com/article/sql-server-2008/using-table-valued-parameters-to-update-multiple-rows
答案 2 :(得分:0)
如果你做了这样的事情,那该怎么办?
通过某种方式,将这55,000行数据存入数据库;如果他们还没有。 (如果您现在正在从某个查询中获取这些行,请安排将查询结果存储在该数据库的临时表中。(这可能是存储过程的正确应用程序。 )
现在,您可以将您需要执行的操作表示为两个单独的SQL查询:一个用于执行更新,另一个用于执行插入操作。第一个查询可能使用诸如“WHERE FOO IN(SELECT BAR FROM @TEMP_TABLE ...)”之类的子句来标识要更新的行。其他人可能会使用“WHERE FOO NOT IN(...)”
确切地说,这是完全我将期望需要使用存储过程来做的事情,因为,如果你想一想,“SQL服务器本身”正是正在做这项工作的合适的一方,因为他是唯一已经拥有现有数据的人,你打算操纵。他一个人不必在任何地方“传输”这55,000行。完美。