gpt4 book ai didi

sql - SQL Server 查询的最大大小? IN 子句?有更好的方法吗

转载 作者:行者123 更新时间:2023-12-01 16:59:17 24 4
gpt4 key购买 nike

Possible Duplicate:
T-SQL WHERE col IN (…)

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

IN 子句的最大大小?我想我看到了有关 Oracle 有 1000 个项目限制的信息,但您可以通过将 2 个 IN 进行 AND 运算来解决这个问题。 SQL Server 中存在类似问题吗?

更新那么,如果我需要从另一个系统(非关系数据库)获取 1000 个 GUID 并对 SQL Server 执行“JOIN in code”,最好的方法是什么?是将 1000 个 GUID 列表提交到 IN 子句吗?或者还有其他更有效的技术吗?

我还没有对此进行测试,但我想知道是否可以将 GUID 作为 XML 文档提交。例如

<guids>
<guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid>
<guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid>
</guids>

然后对文档和表进行某种 XQuery JOIN。效率低于 1000 项 IN 子句?

最佳答案

每个 SQL 批处理都必须适合 Batch Size Limit : 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 将达到 SO at about 10k values in the IN ,但现在的堆栈更深了(因为 x64),所以它可以非常深。

更新

您已经找到了 Erland 的关于将列表/数组传递到 SQL Server 的文章。使用 SQL 2008,您还拥有 Table Valued Parameters它允许您将整个 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 - SQL Server 查询的最大大小? IN 子句?有更好的方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com