sql-server - SQLSTATE[IMSSP] : Tried to bind parameter number 2101. SQL Server 支持最多 2100 个参数

标签 sql-server laravel-5.4

我正在尝试运行此查询

$claims = Claim::wherein('policy_id', $userPolicyIds)->where('claim_settlement_status', 'Accepted')->wherebetween('intimation_date', [$startDate, $endDate])->get();

这里,$userPolicyIds 可以有数千个策略 ID。有什么办法可以增加 SQL Server 中参数的最大数量吗?如果没有,谁能帮我找到解决这个问题的方法吗?

最佳答案

wherein 方法创建以下形式的 SQL 片段 WHERE policy_id IN (userPolicyIds[0], userPolicyIds[1], userPolicyIds[2]..., userPolicyIds[MAX]) 。换句话说,整个集合被展开到 SQL 语句中。结果是 SQL Server 拒绝执行的 HUGE SQL 语句。

这是 Microsoft SQL Server 的一个众所周知的限制。这是一个硬性限制,因为似乎没有改变它的选择。但 SQL Server 很难因为有此限制而受到指责,因为尝试执行包含多达 2000 个参数的查询是一种不健康的情况,您一开始就不应该陷入这种情况。

因此,即使有办法更改限制,仍然建议保持限制不变,并重新构造代码,这样就不会出现这种不健康的情况。

您至少有几个选择:

  • 将您的查询分解为多个批处理,例如每个批处理 2000 个项目。

  • 将您的字段添加到临时表中,并使您的查询加入该表。

就我个人而言,我会选择第二个选项,因为它的性能比其他任何选项都要好得多,并且可以任意扩展。

关于sql-server - SQLSTATE[IMSSP] : Tried to bind parameter number 2101. SQL Server 支持最多 2100 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44361915/

相关文章:

php - Laravel - 类型错误 : Too few arguments?

sql-server - 帮助理解 SQL 存储过程参数

sql-server - 授予或撤销的权限 RECEIVE 与对象不兼容

sql - 使用 SQL Server 作为具有多个客户端的数据库队列

c# - 使用自动增量主键在c#中的sql表中插入一行

php - 从请求重定向到同一页面(不起作用)。拉拉维尔 5.4

php - 如何在 laravel 中为所有模型使用 common Trait 实现 Eloquent 事件

javascript - 类型错误 : Cannot read property '$auth' of undefined Vuejs

c# - 如何从 .aspx 中读取用户输入并将其存储在 .aspx.cs 中的 SQL Server 数据库中

Laravel 混合 : These dependencies were not found: