真的希望有人可以在这里提供一些建议。我有一个具有以下结构的SQL语句:
SELECT <Columns> FROM (SELECT <More columns> FROM (SELECT <AllColumns> FROM View))
有些步骤似乎不需要,但所有这些步骤都有原因
- 该视图包含每次导入进程运行时自动更新的数据。它包含一个相当大的查询,从多个表中收集数据。
- 从该视图中,我们的客户可以构建自己的查询,以便为报告目的创建SSAS数据库,从而进行第二次查询。这里还应用了一些额外的逻辑,如友好名称。
- 有时我们的客户希望近距离检查数据,并在Web应用程序上带回2GB的查询很少是个好主意。因此,我们构建了一个工具,客户可以在其中选择他们想要从主查询返回的数据,因此外部查询。
以下是一个示例查询:
SELECT (ColA, ColB, ColC)
FROM (SELECT ColA, ColB, ColC, ColD, ColE, ColF
FROM (Select * FROM FullView))
所有这些都能正常工作,但在一个特定情况下会出现问题。为了尽可能快地进行数据检索,我们在数据库中创建了一个包含中间查询结果的汇总表。但是,对于我们的一个查询,摘要表拒绝构建。查询可以使用正确的列成功创建表,但数据永远不会被填充,SQL Server语句只是悬而未决。
我尝试了以下内容:
- 最初创建摘要表的语句是SELECT INTO语句。除了有问题之外,它适用于所有查询。
- 认为由于某些模糊的原因资源可能无法释放,我将语句拆分为SELECT INTO语句,WHERE子句为1 = 2(允许创建表)和INSERT INTO SELECT子句,它将创建数据。 SELECT INTO语句运行完美,INSERT INTO SELECT子句什么都不做。
- 但是,如果我要运行INSERT INTO子句的SELECT部分,则查询将在一分钟内执行,这是可接受的,因为原始视图的执行时间。但是如果我在前面添加INSERT INTO语句而不更改SELECT语句的任何部分,则查询将挂起。也许它会在某个地方执行,但是从一分钟到几个小时返回较少数据的查询可能会激怒一些人。
- 我查看了sp_who2结果,系统中没有块。
是否有人有任何建议或其他地方我可以查找错误?
谢谢!