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