当前位置: 首页 > 面试题库 >

您是否遇到过SQL Server由于引用过多表而无法执行的查询?

丌官星渊
2023-03-14
问题内容

您是否看到过任何错误消息?

-SQL Server 2000

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

-SQL Server 2005

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

如果是,您做了什么?

放弃了?说服客户简化需求?对数据库进行非规范化?

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

  1. 我不确定是否可以在答案编辑窗口中粘贴70 KB的代码。
  2. 即使我可以这样做,也无济于事,因为这70 KB的代码将引用20或30个视图,而我也不得不发布这些视图,因为否则该代码将毫无意义。
    我不想听起来好像在吹牛,但问题不在查询中。查询是最佳的(或至少几乎是最佳的)。我花了无数小时来优化它们,寻找可以删除的每一个列和每个表。设想一个报表有200或300列,

问题答案:

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

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

然后找到您的主表(例如上面示例中的orders表)并提取该数据,以及一些补充数据,这些补充数据仅说一个联接即可(客户名称,产品名称)。您可以执行SELECT INTO将其直接放入表变量中。

从那里开始,遍历表,并针对每一行,执行一堆小的SELECT查询,以检索结果集所需的所有补充数据。将它们插入到每一列中。

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

我对此没有任何确切的数字,但是到目前为止,我已经研究了三个不同的实例,这些实例实际上比使用大量联接执行大型选择查询要快。



 类似资料:
  • 问题内容: 我有一个与数据库无关的Java程序,在插入时,我需要知道是否由于重复的键而引发了SQLException。 如果我使用的是单个数据库驱动程序,那么我将只使用ErrorCode,但是由于可以使用非常不同的引擎,因此ErrorCode是不同的。 有人做过吗?有任何想法吗? 许多TIA! 编辑: 我有一个配置文件,其中存储了驱动程序类(即:org.apache.derby.jdbc.Clie

  • 我得到了 我错过了什么?

  • 问题内容: 无论我尝试安装哪个软件包,都会出现此错误: 我看到了这个问题,但答案对我不起作用。我可以安装分发程序包,到目前为止,它是我唯一可以安装的程序包,但是它不能解决问题,因为在我尝试安装另一个程序包时,egg_info错误立即返回。我对此感到非常沮丧,因为我在任何地方都找不到任何帮助。我之前也已经安装了django和pip以及所有内容,但是我不得不重新安装所有内容,现在它不起作用了。任何帮助

  • 问题内容: 我有以下方法: 在这里,我依次调用三种方法,这依次命中数据库并获取我的结果,然后对从数据库命中获得的结果进行后处理。我知道如何通过使用并发调用这三种方法。但是我想用Java 8 来实现。有人可以指导我如何通过并行流实现相同目标吗? 编辑 我只想通过Stream并行调用方法。 问题答案: 您可以利用这种方式:

  • 问题内容: 设想: 我有3个表需要连接在一起,where子句用于限制结果集,并且从每个表中只选择了几列。简单的。但是,执行此操作的查询不是很漂亮,并且在数据库和应用程序之间使用ORM时,就像试图将方形钉放入圆孔中一样。 解决这个问题的方法是创建一个包含查询的视图,现在我的应用程序模型直接映射到数据库中的一个视图。不再疯狂地映射ORM层。 问题:假设这里没有其他因素起作用, 如果直接执行SQL语句

  • 本文向大家介绍详解sqlserver查询表索引,包括了详解sqlserver查询表索引的使用技巧和注意事项,需要的朋友参考一下 SELECT   索引名称=a.name  ,表名=c.name  ,索引字段名=d.name  ,索引字段位置=d.colid  需创建索引 例如: 根据某列判断是否有重复记录,如果该列为非主键,则创建索引 根据经常查询的列,创建索引 无须创建索引 字段内容大部分一样,