许多行的高效SQL UPDATE命令

时间:2012-01-24 02:48:36

标签: .net sql sql-server

我的问题不是“能够”,而是“能够快速”

我有一个静态行数的表,每行需要经常更新多个项目。我是用.Net和SQL Server做的。

对于测试,该表有大约5000行,20列,我每5秒更新3行/列。

我调查了一些解决方案,但无法将更新时间转到我想要的地方(<1秒):

  1. 执行5000个SQL UPDATE命令:大约需要4秒
  2. 使用DataAdapter,更新DataTable,然后执行DataAdapter.Update:大约4秒(它只执行多个UPDATE命令,如1。)
  3. 使用大型单个UPDATE TABLE tablename col1 = CASE ... WHEN .... WHEN ...:给出错误“查询处理器耗尽堆栈空间....”
  4. 目标是获取内存中的大量数据并将其持久保存到表中,以便其他应用程序或用户可以访问此数据。我认为有这样做的有效手段,我没有偶然发现。

    一个限制是我可能无法访问用户SQL Server,所以我想使用UPDATE命令或类似命令在.Net代码中以编程方式执行此操作。

2 个答案:

答案 0 :(得分:5)

让您的代码调用System.Data.SqlClient.SqlBulkCopy API批量将更改数据插入到临时表中,然后使用UPDATE命令读取分段数据并使用它更新目标表。

这种方法的原因是上述所有方法都存在相同的基本性能瓶颈:首先将数据导入SQL Server。一旦进入,有很多方法可以将静态数据转换为UPDATE,所有这些都具有非常好的性能。

答案 1 :(得分:2)

如果您的sql server版本是2008+,那么我建议创建存储过程并将所有要更新的数据传递到此SP 表值参数。这将更快地执行