许多行的高效SQL UPDATE命令

dao*_*ao 0 .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表名col1 = CASE ... WHEN .... WHEN ...:给出错误"查询处理器耗尽堆栈空间......"

目标是获取内存中的大量数据并将其持久保存到表中,以便其他应用程序或用户可以访问此数据.我认为有这样做的有效方法,我没有偶然发现.

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

RBa*_*ung 5

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

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