解决Too many parameters were provided in this RPC request. The maximum is 2100.

在使用SQL操作数据表时,如果用户定义的函数参数超过2100条会报错,

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

这个原因是超过了SQL Server 的最大容量规范

指定 SQL Server 组件中定义的各种对象的最大大小和最大数量参考微软链接:https://docs.microsoft.com/zh-cn/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-2017

用户定义的函数参数个数最大为2100

解决方法

既然不能超过最大容量规范,只能避免超过最大容量了,超过2100的话进行批次更新即可。

代码如下:

public void Test(IList animalIds)
{
  using (var db = new SqlConnection(this.connectionString))
  {
    db.Open();
    while (animalIds.Any())
    {
       //一次插入1000条
      var ids2Insert = animalIds.Take(1000);
      animalIds = animalIds.Skip(1000).ToList();
      db.Execute(SQL,
        new
        {
            id = ids2Insert
        });
    }
  }
}

测试:

var ids = Test(Enumerable.Range(1, 2500).ToList());

Reference:
https://stackoverflow.com/questions/39592340/how-can-i-use-more-than-2100-values-in-an-in-clause-using-dapper

你可能感兴趣的:(解决Too many parameters were provided in this RPC request. The maximum is 2100.)