当前位置: 首页 > 面试题库 >

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

何华灿
2023-03-14
问题内容

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;


 类似资料:
  • 问题内容: 是否可以定义一个最大列数的网格,但是当屏幕宽度改变时允许元素包装到新行上? 我有隐式类,允许行包装到新行上,但是没有最大列数。 这是使用弹性盒的一种方法的代码笔 CSS: 另一种方法是使用网格 我想要一个相当通用的解决方案,没有Java脚本或媒体查询,我想实现的目标是否可能? 问题答案: 使用flexbox,您可以简单地将a设置为容器,因为您的元素具有固定的宽度: 唯一的缺点是您需要知

  • 给定一个数组,编写一个程序以在大小的所有子数组中找到最大 gcd 我的代码: 它是O(N^2),还能再优化吗?

  • 我一次又一次地进行这种测试,我觉得有一种更优雅的方法来做。 你能帮我吗?

  • 问题内容: 这两个查询都给出相同的输出,这在性能上明智的联接或带有existing子句的相关子查询中比较好,哪个更好。 编辑:-是否有供联接使用的alternet方式,以提高性能:-在上述2个查询中,我需要来自部门以及联系信息表的信息 问题答案: 通常,使用EXISTS子句是因为您可能需要DISTINCT进行JOIN才能提供预期的输出。例如,如果一行有多个Department行ContactInf

  • 问题内容: 我正在将几个已硬编码到应用程序中的查询转换为动态的参数化查询。我遇到一个特定的查询,该查询有一个子句: 第一个参数很简单,因为它只是一个普通参数: 但是,第二个参数是一个整数列表,表示需要更新的行的ID。如何为单个参数传递整数列表?或者,您将如何设置此查询,以使您不必每次调用时都完全构建它,并且可以防止SQL注入攻击? 问题答案: 您可以基于(可能)可变数量的参数“动态”构建参数化查询

  • 我有一个类Api,它包含一个数据列表: