Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL数据库中重新计算大表_C#_.net_Sql Server 2008 R2 - Fatal编程技术网

C# 在SQL数据库中重新计算大表

C# 在SQL数据库中重新计算大表,c#,.net,sql-server-2008-r2,C#,.net,Sql Server 2008 R2,我们正在解决这个问题: SQL Server 2008 R2(R2!)(数百万行)中有一个很大的表 我们需要遍历这个表,每一行都需要由Ccode重新计算(因此该表是从C应用程序加载的) 如果性能至关重要,如何做到这一点?某种批处理?如果性能至关重要,请使用SQL CLR计算新值。您可以这样使用update语句。SQL CLR对您可以使用的代码进行了限制,因此这可能不是一个容易的选择 如果SQL CLR不是选项,还有另一种方法: 我假设有一个整数主键。我会这样做: select top 100

我们正在解决这个问题:

  • SQL Server 2008 R2(R2!)(数百万行)中有一个很大的表
  • 我们需要遍历这个表,每一行都需要由
    C
    code重新计算(因此该表是从
    C
    应用程序加载的)

如果性能至关重要,如何做到这一点?某种批处理?

如果性能至关重要,请使用SQL CLR计算新值。您可以这样使用update语句。SQL CLR对您可以使用的代码进行了限制,因此这可能不是一个容易的选择

如果SQL CLR不是选项,还有另一种方法:

我假设有一个整数主键。我会这样做:

select top 10000 *
from T
where ID > @lastIDProcessed
order by ID
  • 请求一批行(10k左右)
  • 计算更新
  • 发送更新
  • 重复
诀窍是跟踪已处理的行。保留处理的最后一行的ID值。请求这样的批次:

select top 10000 *
from T
where ID > @lastIDProcessed
order by ID

这将保证快速可靠的执行。

请注意,CLR听起来很有趣。你能写一个小片段吗?但是我们的C代码非常复杂。是的,用SQL CLR发布一个小片段是不可能的;-)如果您的代码很复杂,我建议使用后一个选项。对。使用表值参数将它们发送到过程或内联SQL命令中。不要发布10k个人更新。使用TVP作为输入,在一个语句中发布它们。