gpt4 book ai didi

sql-server - 使用 Contains() 时达到 2100 个参数限制 (SQL Server)

转载 作者:行者123 更新时间:2023-12-01 17:44:31 27 4
gpt4 key购买 nike

from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME

depts是部门 ID 的列表 ( IEnumerable<int> )

此查询工作正常,直到您传递一个大列表(例如大约 3000 个部门 ID)..然后我收到此错误:

The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.

我将查询更改为:

var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME

使用 IndexOf()修复了错误,但使查询变慢。还有其他方法可以解决这个问题吗?非常感谢。

最佳答案

我的解决方案(Guids 是您想要过滤的 id 列表):

List<MyTestEntity> result = new List<MyTestEntity>();
for(int i = 0; i < Math.Ceiling((double)Guids.Count / 2000); i++)
{
var nextGuids = Guids.Skip(i * 2000).Take(2000);
result.AddRange(db.Tests.Where(x => nextGuids.Contains(x.Id)));
}
this.DataContext = result;

关于sql-server - 使用 Contains() 时达到 2100 个参数限制 (SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com