0

我想对一百万多行执行批量更新。

但是,我不想更新整个表,而是小批量更新(以防止锁定整个表)。每 10,000 行说一次。

例如,类似于此答案:如何在 SQL Server 中更新具有数百万行的大型表?

目前使用 UpdateFromQuery 不加载整个上下文,并直接更新数据库。

现在如何批量更新?我应该使用.Take函数吗?

var productUpdate = _dbContext.Set<Product>()
    .Where(x => x.ProductType == 'Electronics')
    .UpdateFromQuery( x => new Product { ProductBrand = "ABC Company" });

目标代码:

如何在 SQL Server 中更新具有数百万行的大表?

SET @BatchSize = 10000;

SET @Rows = @BatchSize; -- initialize just to enter the loop

BEGIN TRY    
  WHILE (@Rows = @BatchSize)
  BEGIN
      UPDATE TOP (@BatchSize) prod
      SET Value = 'ABC Company'
      FROM dbo.Products prod
      WHERE prod.ProductType = 'Electronics'
   SET @Rows = @@ROWCOUNT;
 END;

注意:目前除非需要,否则不要使用 RawSql

4

1 回答 1

1

免责声明:我是Entity Framework Plus项目的所有者

目前无法使用BatchSize.

但是,我们将对其进行研究并提供此功能。

功能发布后,我将更新此答案。


编辑:答案更新

从 v3.0.61 开始,BatchSizeSQL Server 现在支持该选项。

您现在可以BatchSize在使用时指定UpdateFromQuery

于 2020-08-18T12:39:45.747 回答