我有两个查询访问两个不同的SQL Server以避免链接服务器通信。 第一个查询得到一个OrderID列表,我使用c#将它们组织成一个传递给第二个查询的字符串,如下面的格式:
Select .....
From .....
Where OrderID in (1,2,3,4,5,6)
- 1,2,3,4,5,6是第一次查询结果的过程。
我发现如果从第一个查询中检索到很多orderID,则第二个查询将超时。
有没有什么元素可以传递给“IN”条款?
答案 0 :(得分:3)
如果您需要传递这么多元素,这会成为一个问题,您应该考虑使用已定义的table valued parameter
作为参数的存储过程(应该包含您的列表)。
答案 1 :(得分:1)
有一个硬限制,但它非常高。如果你达到了这个限制,虽然它不会超时,而是拒绝让你进行查询。
在您的情况下,查询只需要很长时间才能运行。但是'in'数组中的项目越多,查询执行所需的时间就越长,因为它还有更多工作要做。如果您的查询时间过长,则会在您找到时超时。
这不是限制,而是容差。
您应该尝试做的是对查询进行分页,这样您就可以一次将其限制为100行左右并进行多次查询。
您可能还想考虑使用像Entity Framework这样的ORM(你已经有了C#标签,但是这里没有C#,所以我假设你就是这样) - 那么它看起来像这样:
Orders.Where(o => OrderIDs.Contains(o.OrderID)).Skip(100).Take(100);
这是我个人的偏见,虽然对你是否有好处而言是如此苛刻。
答案 2 :(得分:-1)
它是2100个元素。请参阅documentation。