我正在尝试运行此查询
$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/