2

我有两个查询访问两个不同的 SQL Server 以避免链接服务器通信。第一个查询得到一个 OrderID 列表,我使用 c# 将它们组织成一个字符串传递给第二个查询,如下格式:

Select .....
From .....
Where OrderID in (1,2,3,4,5,6)

-- 1,2,3,4,5,6 是第一次查询结果的过程。

我发现如果从第一个查询中检索到很多 orderID,第二个查询将超时。

有没有什么做法可以将多少元素传递给“IN”子句?

4

3 回答 3

3

如果您需要传递如此多的元素以至于这成为一个问题,您应该考虑使用定义table valued parameter为参数的存储过程(它应该包含您的列表)。

编辑:见http://blogs.msdn.com/b/felixmar/archive/2010/10/27/how-to-create-and-execute-a-stored-procedure-using-a-table-as-a -参数.aspx

于 2013-05-16T14:57:54.693 回答
1

有一个硬限制,但它非常高。如果您达到该限制,尽管它不会超时,而是根本拒绝让您进行查询。

在您的情况下,查询运行时间太长。但是你的'in'数组中的项目越多,你的查询执行的时间就越长,因为它有更多的事情要做。如果您的查询花费的时间太长,您会发现它会超时。

这不是关于限制,而是关于公差。

您可能应该尝试对查询进行分页,以便一次将其限制为 100 行左右并执行多个查询。

您可能还想考虑使用像实体框架这样的 ORM(您有 C# 标签,但这里没有 C#,所以我假设这就是您所在的位置) - 然后它看起来像这样:

Orders.Where(o => OrderIDs.Contains(o.OrderID)).Skip(100).Take(100);

这是我个人的偏见,尽管对于你这样做是否有益。

于 2013-05-16T14:59:58.407 回答
-1

这是2100个元素。请参阅文档

于 2013-05-16T14:56:09.373 回答