您是否遇到过SQL Server无法执行的查询,因为它引用了太多表?

Mar*_*icz 18 database sql-server sql-server-2005 sql-server-2000

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

- SQL Server 2000

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

- SQL Server 2005

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

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

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


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

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

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

Dil*_*e-O 9

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

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

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

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

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

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