SQL Server查询的最大大小是多少?(字符数)
IN子句的最大大小?我想我看到关于Oracle的项目限制为1000的一些信息,但是您可以将ANDing 2 IN一起解决。SQL Server中是否存在类似问题?
更新 因此,如果我需要从另一个系统(非关系数据库)中获取1000个GUID,并针对SQL Server进行“代码中的JOIN”操作,那将是最好的方法呢?是否要将1000个GUID列表提交给IN子句?还是还有另一种更有效的技术?
我还没有测试过,但是我想知道是否可以将GUID提交为XML文档。例如
<guids> <guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid> <guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid> </guids>
然后针对Doc和Table进行某种XQuery JOIN。效率低于1000个项目的IN子句?
每个SQL批处理都必须符合“批处理大小限制”:65,536 *网络数据包大小。
除此之外,您的查询还受运行时条件的限制。它通常会用完堆栈大小,因为x IN(a,b,c)除了x = a OR x = b OR x = c之外什么都不是,这会创建类似于x = a OR(x = b OR(x = c)),因此使用大量OR会变得很深。SQL 7在IN中的SO值大约为1万,但是如今堆栈更深(由于x64),因此它可以变得更深。
更新
您已经找到Erland的文章,主题为将列表/数组传递到SQL Server。在SQL 2008中,您还具有表值参数,该值使您可以将整个DataTable作为单个表类型参数进行传递并在其上进行联接。
XML和XPath是另一个可行的解决方案:
SELECT ... FROM Table JOIN ( SELECT x.value(N'.',N'uniqueidentifier') as guid FROM @values.nodes(N'/guids/guid') t(x)) as guids ON Table.guid = guids.guid;