如何从我的C#应用​​程序有效地执行SQ​​L Server数据库更新

时间:2012-02-14 03:22:13

标签: c# sql

我正在尝试找出设计使用SQL Server后端数据的C#应用​​程序的最佳方法。

我的应用程序需要定期从应用程序中的循环中每次更新55K行。在进行更新之前,需要检查是否存在要更新的记录。

如果存在,则更新一个字段。 如果不是,则执行4个字段的插入。

要更新的表有600K行。

  1. 从我的应用程序处理这些更新/插入的最有效方法是什么?
  2. 我应该在c#中创建数据字典并加载600K记录并首先查询字典而不是数据库吗?
  3. 这是一种更快的方法吗?
  4. 我应该使用存储过程吗?
  5. 根据这种情况,获得最佳性能的最佳方法是什么?

3 个答案:

答案 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行。完美。