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