你有没有看到任何错误消息?

- SQL Server 2000

无法为视图或功能解析分配辅助表。
超出了查询中的最大表数(256)。

- SQL Server 2005

查询中的表名太多。 允许的最大值为256。

如果是的话,你做了什么?

放弃了? 说服客户简化他们的需求? 非规范化数据库?


@(每个人都希望我发布查询):

  1. 我不确定我是否可以在答案编辑窗口中粘贴70千字节的代码。
  2. 即使我可以这样做也无济于事,因为这70千字节的代码将引用我或者必须发布的20或30个视图,否则代码将毫无意义。

我不想听起来像我在这里吹嘘,但问题不在于查询。 查询是最佳的(或至少几乎是最佳的)。 我花了无数个小时来优化它们,寻找可以删除的每个列和每个表。 想象一下,有200或300列的报告必须用一个SELECT语句填充(因为这是几年前它仍然是一个小报告时的设计)。

===============>>#1 票数:9 已采纳

对于SQL Server 2005,我建议您使用表变量并部分构建数据。

为此,请创建一个表变量,该变量表示要发送给用户的最终结果集。

然后找到你的主表(比如上面例子中的订单表)并提取这些数据,加上一些补充数据,只说一个加入(客户名称,产品名称)。 您可以执行SELECT INTO直接将其放入表变量中。

从那里,遍历表格并为每一行,做一堆小的SELECT查询,检索结果集所需的所有补充数据。 随时将这些插入每列。

完成后,您可以从表变量中执行简单的SELECT *并将此结果集返回给用户。

我没有任何硬数据,但是到目前为止我已经有三个不同的实例,这些实际上这些较小的查询实际上比使用一堆连接进行大量选择查询更快。

===============>>#2 票数:1

我从来没有遇到过这种情况,说实话,在查询中引用> 256个表的想法让我感到害怕。

你的第一个问题应该可能是“为什么这么多?”,紧随其后的是“什么位的信息我没有必要?” 我担心从这样的查询返回的数据量也会开始严重影响应用程序的性能。

===============>>#3 票数:1

@chopeen您可以更改计算这些统计信息的方式,而是保留所有每个产品统计信息的单独表格。下订单时,循环访问产品并更新统计信息表格中的相应记录。 这会将大量计算负载转移到结帐页面,而不是在运行报表时将所有内容都运行在一个巨大的查询中。 当然,有些统计数据不会以这种方式运作,例如在购买特定产品后跟踪客户的下一次购买。

===============>>#4 票数:1

在为SQL Server 2000上运行的Dynamics CRM安装编写Reporting Services报表时,这种情况会一直发生.CRM具有很好的规范化数据模式,从而导致大量连接。 实际上有一个修补程序将从256增加到高达260: http//support.microsoft.com/kb/818406 (我们一直认为这是SQL Server团队的一个好笑话)。

正如Dillie-O所说,解决方案是识别适当的“子连接”(最好是多次使用的连接)并将它们分解为临时表变量,然后在主连接中使用它们。 这是一个主要的PIA并经常杀死性能。 我为你感到难过。

@Kevin,爱开球 - 说出一切:-)。

===============>>#5 票数:0

我想看看那个查询,但我想这是某种迭代器的一些问题,虽然我想不出任何可能的情况,我敢打赌它来自一个糟糕的/ / case /游标或者很多实施不佳的观点。

===============>>#6 票数:0

发布查询:D

此外,我觉得可能的问题之一可能是有一个(读取200+)名称/值表,可以浓缩成一个查找表。

===============>>#7 票数:0

我有同样的问题...我的开发框运行SQL Server 2008(视图工作正常)但在生产(使用SQL Server 2005)时,视图没有。 我最终创建了视图以避免此限制,在视图中使用新视图作为查询的一部分抛出错误。

考虑到逻辑执行是一样的傻事......

===============>>#8 票数:0

当我想创建一个视图时,在SQL Server 2005(曾在2008年工作)中遇到同样的问题。 我通过创建存储过程而不是视图来解决问题。

  ask by Marek Grzenkowicz translate from so

未解决问题?本站智能推荐: