— sql Server 2000
Could not allocate ancillary table for view or function resolution.
The maximum number of tables in a query (256) was exceeded.— sql Server 2005
Too many table names in the query. The maximum allowable is 256.
如果是,你做了什么?
放弃了?说服客户简化需求?对数据库进行非规范化?
@(每个人都希望我发布查询):
>我不知道我是否可以在答案编辑窗口中粘贴70千字节的代码.
>即使我可以这样做,这不会有帮助,因为这个70千字节的代码将引用20或30个视图,我也必须发布,否则代码将是无意义的.
我不想听起来像我在这里吹嘘,但问题不在于查询.查询是最优的(或至少几乎最优).我花了无数次优化他们,寻找每一个单独的列和每个可以删除的表.想象一下,有一个200或300列需要填充一个SELECT语句的报表(因为几年前它仍然是一个小报告).
解决方法
为此,创建一个表变量,表示您要发送给用户的最终结果集.
然后找到您的主表(例如上面的示例中的订单表),并拉取该数据,再加上一点只是说一个加入的补充数据(客户名称,产品名称).你可以做一个SELECT INTO把它直接放在你的表变量中.
从那里,遍历表和每行,执行一堆小型SELECT查询,以检索您的结果集所需的所有补充数据.随时随地将它们插入各列.
完成后,您可以从表变量中执行简单的SELECT *,并将该结果集返回给用户.
我没有任何硬编号,但是我已经有三个不同的实例,迄今为止,做这些较小的查询的实际工作速度比使用大量联接的大量选择查询的速度更快.