Sql Server-子查询中的用户CTE

| 之前曾有人问过这个问题- 如何在SQL Server的子查询中使用CTE? 建议的唯一答案是“仅在顶部定义您的CTE并在子查询中访问它?” 这可行,但我真的很希望能够在以下情况下使用CTE- 作为SELECT中的子查询 作为SELECT的FROM子句中的派生表 这两个都可以在PostgreSQL中工作。使用Sql Server 2005,我得到\“关键字\'with \'\”附近的语法不正确。 我想要它的原因是我的大多数查询都是动态构造的,并且我希望能够定义CTE,将其保存在某个位置,然后根据需要将其放入更复杂的查询中。 如果Sql Server根本不支持这种用法,我将不得不接受它,但是我还没有阅读任何内容指出不允许这样做。 有谁知道是否有可能使它起作用?     
已邀请:
在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 Server不支持此急需的功能。我也一直在寻求帮助。 与PostgreSQL相比,MS SQL Server不支持临时视图。仅当所有CTE定义都可以预先生成并且在每个子查询中都没有冲突的名称时,上述解决方案才有可能起作用-目的是这些CTE定义对于每个级别可能是不同的子查询。 悲伤但真实! 问候, 卡皮尔     

要回复问题请先登录注册