针对多行的高效SQL UPDATE命令



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

我有一个具有静态行数的表,每行需要频繁更新多个项目。我用.Net和SQL Server来做这件事。

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

我已经研究了一些解决方案,但无法将更新时间安排到我想要的位置(<1秒):

  1. 执行5000个SQL UPDATE命令:大约需要4秒
  2. 使用DataAdapter,更新DataTable,然后执行DataAdapter。更新:大约4秒(它只执行多个Update命令,如1。)
  3. 使用单个大型UPDATE TABLE表名col1=CASE。。。何时。。。。何时…:给出错误"查询处理器堆栈空间不足…"

目标是获取内存中的一堆数据,并将其持久化到表中,以便其他应用程序或用户可以访问这些数据。我认为有一些有效的方法可以做到这一点,我没有偶然发现。

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

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

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

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

最新更新