in"中的最大元素数是多少?包含"Where"的查询关键字
本文关键字:quot 包含 Where 关键字 多少 查询 元素 in | 更新日期: 2023-09-27 18:14:00
我有两个查询访问两个不同的SQL Server,以避免链接服务器通信。第一个查询得到一个orderid列表,我使用c#将它们组织成一个字符串,传递给第二个查询,格式如下:
Select .....
From .....
Where OrderID in (1,2,3,4,5,6)
——1、2、3、4、5、6是第一次查询的结果。
我发现如果从第一个查询中检索到很多orderid,第二个查询将超时。
有多少元素可以传递给"IN"子句的实践吗?
如果需要传递的元素太多,这就成了一个问题,那么应该考虑使用一个已定义的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-parameter.aspx
有硬性限制,但非常高。如果你达到了这个限制,虽然它不会超时,但会拒绝让你执行查询。
在您的例子中,查询只是运行时间太长。但是你的"in"数组中的项目越多,你的查询执行的时间就越长,因为它有更多的事情要做。如果查询时间过长,将会超时。
这不是关于限制,而是关于容差。
你应该尝试做的是对你的查询进行分页,这样你就可以一次将其限制在100行左右,并执行多个查询。
你可能也想考虑使用ORM像实体框架(你有c#标签,但这里没有c#,所以我假设你在)-然后它看起来像这样:
Orders.Where(o => OrderIDs.Contains(o.OrderID)).Skip(100).Take(100);
这是我个人的偏见,至于你做这件事是否对你有好处,我还不知道。
这是2100个元素。