mysql 查询所有行 超1000_Oracle数据库查询用 where in 查询的项超过1000条的解决方案...

众所周知,如果我们的用SQL查询语句时,如果用where in带的参数超过1000条的话,oracle是会报错的。

因为项目中遇到这样的问题,所以找到了接下来我要说的这个办法。 因为用的地方很多,所以我把这个封装成了一个方法。

///

/// 获取查询条件超过1000个列表数据的SQL

/// columnName In :list

///

/// 参数列表

/// 字段名称

/// 带出的参数

/// sql

private string GetWhereIn(List list, string columnName, out Dictionary arguments)

{

arguments = new Dictionary();

if (list == null || list.Count == 0) return string.Empty;

var pageSizes = 1000;

// 计算参数分页页数

var totalPages = list.Count % pageSizes == 0 ?

list.Count % pageSizes :

list.Count % pageSizes + 1;

var sqlResultContainer = new List();

for (var pageIndex = 0; pageIndex < totalPages; pageIndex++)

{

var skipCount = pageIndex * pageSizes;

var listGroup = list.Skip(skipCount).Take(totalPages).ToList();

if (listGroup.Count == 0) continue;

sqlResultContainer.Add($"{columnName} IN :p{pageIndex}");

arguments.Add($"p{pageIndex}", listGroup);

}

var sqlResult = "(" + string.Join(" OR ", sqlResultContainer) + ")";

return sqlResult;

}

只想SQL,我用的是Dapper. 所以调用这个方法后,返回的是个sql语句。用于拼接在where后面或者and后面等。 arguments是传值出来的,需要带如到dapper的传参中。

注意的是 argumens的类型是Dictionary 第二个一定是要object,不然的话,dapper是会报错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值