为了账号安全,请及时绑定邮箱和手机立即绑定

SQLServer查询的最大大小?在条款中?有没有更好的方法

SQLServer查询的最大大小?在条款中?有没有更好的方法

白衣非少年 2019-10-28 20:16:55
SQLServer查询的最大大小?在条款中?有没有更好的方法SQLServer查询的最大大小是多少?(字符的#)IN条款的最大尺寸?我想我看到了甲骨文的1000项限制,但是你可以和Anding 2 in一起解决这个问题。SQL Server中类似的问题?更新那么,如果我需要从另一个系统(非关系数据库)获取1000个GUID并针对SQL Server执行“连接代码”,那么最好的方法是什么?是将1000GUID的列表提交给IN子句呢?还是有另一种更有效的技术?我还没有对此进行测试,但我想知道是否可以将GUID作为XML文档提交。例如<guids>     <guid>809674df-1c22-46eb-bf9a-33dc78beb44a</guid>     <guid>257f537f-9c6b-4f14-a90c-ee613b4287f3</guid></guids>然后对Doc和Table执行某种XQuery连接。低于1000项条款的效率?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

每个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将命中SO。在IN中的大约10k值,但是现在的堆栈要深得多(因为x64),所以它可以很深。

更新

您已经找到Erland关于将列表/数组传递给SQLServer的文章。在SQL 2008中,您还拥有表值参数它允许您将整个DataTable作为单个表类型参数传递并在其上联接。

XML和XPath是另一个可行的解决方案:

SELECT ...FROM TableJOIN (
   SELECT x.value(N'.',N'uniqueidentifier') as guid   FROM @values.nodes(N'/guids/guid') t(x)) as guids ON Table.guid = guids.guid;



查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 426 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信