您是否看到过任何错误消息?
-SQL Server 2000
无法为视图或功能解析分配辅助表。 超过了查询中的最大表数(256)。
-SQL Server 2005
查询中的表名太多。最大允许为256。
如果是,您做了什么?
放弃了?说服客户简化需求?对数据库进行非规范化?
@(每个人都希望我发布查询):
我不确定是否可以在答案编辑窗口中粘贴70 KB的代码。 即使我能做到这一点也无济于事,因为这70 KB的代码将引用我也必须发布的20或30个视图,因为否则该代码将毫无意义。 我不想听起来像在吹牛,但问题不在查询中。查询是最佳的(或至少几乎是最佳的)。我花了无数小时来优化它们,寻找可以删除的每一列和每张表。想象一下一个报表,其中有200或300列必须用一个SELECT语句填充(因为几年前它还是一个小报表时,就是这样设计的)。
对于SQL Server 2005,我建议您使用表变量,并在构建过程中部分构建数据。
为此,请创建一个表变量,该变量代表要发送给用户的最终结果集。
然后找到您的主表(例如上面示例中的orders表)并提取该数据,以及一些补充数据,这些补充数据仅表示一个联接(客户名称,产品名称)。您可以执行SELECT INTO将其直接放入表变量中。
从那里开始,遍历表,并针对每一行,执行一堆小的SELECT查询,以检索结果集所需的所有补充数据。将它们插入到每一列中。
完成后,您可以从表变量中执行简单的SELECT *,并将此结果集返回给用户。
我对此没有任何确切的数字,但是到目前为止,我已经研究了三个不同的实例,在这些实例中,执行这些较小的查询实际上比执行带有大量联接的大规模选择查询要快。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。