Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “中元素的最大数量是多少?”;在;查询的关键字有“quot;其中;_C#_Sql_Sql Server - Fatal编程技术网

C# “中元素的最大数量是多少?”;在;查询的关键字有“quot;其中;

C# “中元素的最大数量是多少?”;在;查询的关键字有“quot;其中;,c#,sql,sql-server,C#,Sql,Sql Server,我有两个查询访问两个不同的SQL Server以避免链接服务器通信。 第一个查询获取OrderID列表,我使用c#将它们组织成一个字符串,传递给第二个查询,格式如下: Select ..... From ..... Where OrderID in (1,2,3,4,5,6) --1,2,3,4,5,6是从第一次查询的结果开始的过程 我发现如果从第一个查询中检索到很多OrderID,那么第二个查询将超时 有没有实践证明有多少元素可以传递给“IN”子句?总共有2100个元素。请参阅.< /p><

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

Select .....
From .....
Where OrderID in (1,2,3,4,5,6)
--1,2,3,4,5,6是从第一次查询的结果开始的过程

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


有没有实践证明有多少元素可以传递给“IN”子句?

总共有2100个元素。请参阅.< /p>< P>如果您需要传递这么多元素,这就成为问题,您应该考虑一个存储过程,使用一个已定义的<代码>表值参数< /C>作为一个参数(它应该包含您的列表)。
编辑:请参见

有一个硬限制,但它非常高。如果你达到了这个限制,虽然它不会超时,但会拒绝让你进行查询

在您的情况下,查询运行时间太长。但是“in”数组中的项越多,查询执行的时间就越长,因为它有更多的事情要做。如果您的查询花费的时间太长,它将在您找到时超时

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

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

你可能还想考虑使用一个类似于ORM的实体框架(你有C标签,但是这里没有C,所以我假设你在里面)-然后看起来像这样:

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

这是我个人的偏见,尽管对于这样做是否对你有好处,这是一个很小盐的问题。

你在OrderID列上有一个好的索引吗?看起来人们在上做了一些测试:显然,无论实践是什么,如果你已经到了查询无法执行的地步,你就已经过去了。在这一点上,知道你应该通过什么似乎对你没有帮助。也许你想问,在一个能够容纳如此多物品的庄园里,还有什么其他方法可以达到预期的效果?或者你已经知道一个合适的解决方案,并且想知道你是否应该使用它;如果是这样,答案是肯定的。传递更多信息可能会导致错误,但如果他的查询在传递更少信息时超时…“每个用户定义函数的参数”?这不是用户想要做的。最终目的不是使用链接服务器通信。所以我有两个连接字符串来得到最终结果。表值参数必须在数据库中存储某些内容,但不能从查询或查询中访问Two@HanYiZhang服务器之间不必相互了解。我的观点是,您可以使用第一个查询中的值在c#中构造表值参数。第一个服务器不需要知道。大卫,谢谢!这个答案足够准确,可以使用。根据您提供的引用,table value参数在使用之前不需要在两个数据库中创建表。它非常整洁而且有用。