Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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# 使用c批更新数千个SQL行#_C#_Sql_Sql Server 2008 - Fatal编程技术网

C# 使用c批更新数千个SQL行#

C# 使用c批更新数千个SQL行#,c#,sql,sql-server-2008,C#,Sql,Sql Server 2008,我需要一行一行地更新SQL表中的数万行。如何通过一些批量更新或类似操作来加速此场景?我们使用SQLServer2008 Edit:我需要从C#而不是从存储过程更新行(发出SQL),因为逻辑很复杂。我需要,比如说,单独“重新测试”每一行 Edit2:我们需要“更新”整个表(每行)。是否可以按块加载表,在内存中更新它们并保存回数据库???如何使用C#? 临时禁用触发器 临时删除索引 在循环中更新更少的记录以减少锁定 这里有很多假设,但是在业务层中创建一个和,用所有需要立即更新的行填充该内存表,然后调

我需要一行一行地更新SQL表中的数万行。如何通过一些
批量更新
或类似操作来加速此场景?我们使用SQLServer2008

Edit:我需要从
C#
而不是从存储过程更新行(发出SQL),因为逻辑很复杂。我需要,比如说,单独“重新测试”每一行

Edit2:我们需要“更新”整个表(每行)。是否可以按块加载表,在内存中更新它们并保存回数据库???如何使用C#?

  • 临时禁用触发器
  • 临时删除索引
  • 在循环中更新更少的记录以减少锁定

这里有很多假设,但是在业务层中创建一个和,用所有需要立即更新的行填充该内存表,然后调用一个执行正确的、基于集合的更新的进程

CREATE PROC dbo.RBARBane(@tvp dbo.MyUserDefinedTableType)
AS
BEGIN
    UPDATE
        T
    SET
        col1 = TVP.col1
        -- all the columns that need updated
    FROM
        dbo.Table T
        INNER JOIN
            @tvp TVP
            ON TVP.key1 = T.key1
END

您目前如何执行此任务?您使用的是游标还是其他RBAR方法?或者,您的查询集是基于查询集的,但性能很差?此外,请描述您正在尝试完成的工作(每月付款对账将所有账户标记为在借方和贷方净额结算时结算),并让我们了解这些表的外观。请更具体一些,例如,为什么您需要更新“一行接一行”?这里有顺序的业务逻辑吗?SQL的全部要点是在集合中进行操作,而不是逐行进行操作。我们需要“重新测试”每一行并对其进行更新。逻辑是复杂的,不仅涉及数据库。你能批量测试它们吗?如果没有,你将得到的最好的表现是一排排的痛苦。而且,这不是数据库的用途。这只是批量更新的猜测。我认为你应该写更多关于你的需求的评论。在尝试优化之前,你应该衡量一下更新的哪个部分花费了最多的时间。我认为这是一个骗局。您的基本问题是需要访问每一行并对其执行“复杂”测试,然后发布。这不会因为试图减少这些开销而得到改善。@Randy:这要看情况而定。可能有一个更新触发器,每行执行500毫秒。因此,这完全是一个猜测,没有更多的信息,但逻辑需要在C#中,它将从WCF调用。那怎么办?我们正在从WCF调用update,主要逻辑在WCF(C#)中。不知道WCF,但不知道C#,WCF不允许创建和调用SqlCommand存储过程吗?看看链接文章的底部,它有一个参考C#调用部分。是的,现在很明显。只需从数据库加载表,在C#中更新它,并使用更新后的表作为参数调用存储过程,对吗?