Sql server SQLSTATE[IMSSP]:尝试绑定参数编号2101。SQL Server最多支持2100个参数

Sql server SQLSTATE[IMSSP]:尝试绑定参数编号2101。SQL Server最多支持2100个参数,sql-server,laravel-5.4,Sql Server,Laravel 5.4,我正在尝试运行此查询 $claims = Claim::wherein('policy_id', $userPolicyIds)->where('claim_settlement_status', 'Accepted')->wherebetween('intimation_date', [$startDate, $endDate])->get(); 这里,$UserPolicyId可以有数千个策略ID。是否有任何方法可以增加SQL server中的最大参数数?如果没有,有人能

我正在尝试运行此查询

$claims = Claim::wherein('policy_id', $userPolicyIds)->where('claim_settlement_status', 'Accepted')->wherebetween('intimation_date', [$startDate, $endDate])->get();
这里,$UserPolicyId可以有数千个策略ID。是否有任何方法可以增加SQL server中的最大参数数?如果没有,有人能帮我找到解决这个问题的方法吗?

WHERE方法创建一个SQL片段,其形式为userPolicyIds[0]、userPolicyIds[1]、userPolicyIds[2]…、userPolicyIds[MAX]中的policy\u id。换句话说,整个集合将被展开到SQL语句中。结果是SQL Server拒绝执行一个巨大的SQL语句

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

因此,即使有一种方法可以改变限制,最好还是保持限制不变,改为重新构造代码,这样就不会出现这种不健康的情况

您至少有两种选择:

将您的查询分解为多个批次,例如每个批次包含2000项

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


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

我通过运行这个原始查询解决了这个问题

SELECT claims.*, policies.* FROM claims INNER JOIN policies ON claims.policy_id = policies.id 
                    WHERE policy_id IN $userPolicyIds AND claim_settlement_status = 'Accepted' AND intimation_date BETWEEN '$startDate' AND '$endDate';

这里,$UserPolicyId是一个类似于“123456”、“654321”、“456789”的字符串。我承认,这个查询有点慢。但是策略ID的数量总是非常大,我需要一个快速修复。

只需使用prepare driver_options PDO::prepare

PDO::ATTR_EMULATE_PREPARES=>true


和在和平中拆分where in,[…]中的列或[…]中的列。

我在SQL Server中执行了此查询:从[claims]中选择*from[claims],其中[policy_id]中的[policy_id]从Policys中选择id,并且[claim_Solution_status]=“Accepted”。它运行得很顺利,没有任何问题。在这个查询中,有更多的策略ID,接近一百万。如果SQL server可以运行此查询,这怎么可能是SQL server的限制?只是好奇哦,你问过如何增加SQL server中的最大参数数,所以我认为你了解问题所在。我修改了我的答案来解释发生了什么事。您可以传递给SQL查询的参数数量与SQL查询可以返回的结果数量完全无关。@ShateelAhmed-这就是您正在处理的流程的实际性质-策略ID是从另一个表中提取的吗?如果是这样,您应该用这些细节更新您的问题,然后尝试编写一个查询来处理SQL中的所有数据,而不是尝试通过多个查询来组合结果集。这在本地对我很有效,但由于某些原因,在生产服务器上,我得到的给定属性仅在PDOStatement对象上受支持。作为来自此数据库的每个查询的异常消息。