分别使用分表GUID+表不存在会建表插入和大数据写入+表不存在会建表,普通分表插入引起嵌套层次太深 返回

SqlSugar 沟通中
8 162
该叫什么 wtwt 发布于1周前
悬赏:0 飞吻

image.png

if(deleteEntity.Any())
    db.Deleteable<xxx>().AS(tableName1).Where(deleteEntity).ExecuteCommand();
db.Insertable(list).SplitTable().ExecuteCommand();
//db.Fastest<xxx>().SplitTable().BulkCopy(list);

使用大数据插入没有报错,引起报错的原因可能是什么呢

热忱回答8

  • //分表字段必须要有正确的值才能找对应的表
    db.Storageable(new OrderSpliteTest() { Name="A" ,Time=DateTime.Now })
                    .SplitTable().ExecuteCommand();//内部1000条分页一次
                     
    //BulkCopy                
    db.Storageable(new Order() { Name = "A", Time = DateTime.Now })
                    .SplitTable().ExecuteSqlBulkCopy();//内部1000条分页一次


    分表插入或者更新这样用。

    0 回复
  • wtwt wtwt VIP0
    1周前

    @fate sta:这写法不能自动建表吧,

    我上面的写法也是官网的列子吧,目前项目都是采用的分表不存在自动建表的写法
    0 回复
  • wtwt wtwt VIP0
    1周前

    @fate sta:改为

    db.Storageable(new OrderSpliteTest() { Name="A" ,Time=DateTime.Now })
                    .SplitTable().ExecuteCommand();

    还是报错嵌套层次太深。


    0 回复
  • wtwt wtwt VIP0
    1周前

    大概问题是数据库性能原因,使用的达梦数据库,修改配置文件后没报错了。

    后改回原配置,批量插入数据改为50条也没报错了

    0 回复
  • db.Utilities.PageEach(allList, 100 ,pageList=> {
      //pageList每次只有100条
    });
     
    //异步用 PageEachAsync
    await db.Utilities.PageEachAsync(allList, 100, async pageList => { //要加await
        await db.Insertable(pageList).ExecuteCommandAsync();//要加await
     });

    可以试着分页。

    0 回复
  • wtwt wtwt VIP0
    5天前

    @fate sta:分批是没问题的,就是每次数据还是得小于100条,如果没修改dm.ini

    0 回复
  • 或者用Useparamter方式插入。

    0 回复
  • wtwt wtwt VIP0
    4天前

    @fate sta:问题解决了。达梦自己驱动兼容性问题,没跨大版本也一样。保持数据库版本和驱动都是最新就行

    0 回复