2011-05-24 62 views
6

这个问题已经被问过 -SQL服务器 - 用户CTE子查询

How we can use CTE in subquery in sql server?

唯一的答案建议“只是定义在顶部和访问它的子查询你的CTE?”

这工作,但我真的很想能够在下列情况下使用CTE -

  1. 在SELECT

  2. 在一个子查询作为派生表FROM子句的选择

这两个工作在PostgreSQL中。使用Sql Server 2005,我得到“关键字附近的语法错误”,并带有“”。

我希望它的原因是我的大部分查询都是动态构建的,我希望能够定义一个CTE,将其保存在某处,然后将其放入更复杂的查询中。

如果Sql Server根本不支持这种用法,我将不得不接受它,但我没有阅读任何说明它不被允许的东西。

有谁知道是否有可能得到这个工作?

回答

3

在SQL Server中,CTE必须位于查询的顶部。如果您动态构建查询,除查询外,还可以存储CTE列表。在您将查询发送到SQL Server,你可以用CTE的列表前缀查询:

; with Cte1 as (...definition 1...), 
    Cte2 as (...definition 2...), 
    Cte3 as (...definition 3...), 
    ... 
...constructed query... 

这是假设你正在构建SQL的SQL Server之外。

你也可以考虑创建视图。视图可以包含CTE,它们可以用作子查询或派生表。如果您不经常生成SQL,则视图是一个不错的选择,只有在安装过程中或作为部署的一部分才会说。

1

SQL Server不支持这个非常需要的功能。我也一直在寻找这方面的帮助。 与PostgreSQL相比,MS SQL Server不支持临时视图。上述解决方案也可能仅在所有CTE定义可以事先生成并且在每个子查询中没有冲突名称的情况下才起作用 - 目的在于这些CTE定义对于每个级别可能是不同的的子查询。

悲伤但真实!

Regards, Kapil