SQL Server 查询的最大大小?IN 子句?有什么更好的方法

本教程将介绍SQL Server 查询的最大大小?IN 子句?有没有更好的方法的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

SQL Server 查询的最大大小?IN 子句?有什么更好的方法 教程 第1张

问题描述

可能重复:
T-SQL WHERE col IN (…)

SQL Server 查询的最大大小是多少?(字符数)

IN 子句的最大大小?我想我看到 Oracle 有 1000 个项目的限制,但你可以通过 ANDing 2 个 IN 一起解决这个问题.SQL Server 中的类似问题?

更新那么,如果我需要从另一个系统(非关系数据库)获取 1000 个 GUID 并对 SQL Server 执行代码中的加入",那么最好的方法是什么?是将 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 大约 10k 值,但现在堆栈要深得多(因为 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;

好了关于SQL Server 查询的最大大小?IN 子句?有什么更好的方法的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。