之前已经问过这个问题 -
How we can use CTE in subquery in sql server?
建议的唯一答案是“只需在顶部定义您的CTE并在子查询中访问它?”
这有效,但我真的希望能够在以下场景中使用CTE -
作为SELECT
作为SELECT
这两个都在PostgreSQL中工作。使用Sql Server 2005,我得到“关键字'附近的语法不正确'。”。
我希望它的原因是我的大多数查询都是动态构建的,我希望能够定义一个CTE,将其保存在某处,然后根据需要将其放入更复杂的查询中。
如果Sql Server根本不支持这种用法,我将不得不接受它,但我没有看到任何声明不允许的内容。
有谁知道是否有可能让它发挥作用?
答案 0 :(得分:3)
在SQL Server中,CTE必须位于查询的顶部。如果动态构造查询,除了查询之外,还可以存储CTE列表。在将查询发送到SQL Server之前,可以在查询前添加CTE列表:
; with Cte1 as (...definition 1...),
Cte2 as (...definition 2...),
Cte3 as (...definition 3...),
...
...constructed query...
这假设您正在构建SQL Server之外的SQL。
您还可以考虑创建视图。视图可以包含CTE,它们可以用作子查询或派生表。如果您不经常生成SQL,仅在安装期间或作为部署的一部分生成SQL,则视图是一个不错的选择。
答案 1 :(得分:1)
SQL Server不支持这个非常需要的功能。我也一直在寻求帮助。 MS SQL Server不支持临时视图,而不支持PostgreSQL。上述解决方案也可能只有在事先生成所有CTE定义且每个子查询中都没有冲突名称时才有效 - 目的是每个级别的这些CTE定义可能不同子查询。
伤心但真实!!!
此致 卡皮尔