首页 文章

Sql Server - 子查询中的用户CTE

提问于
浏览
6

之前已经问过这个问题 -

How we can use CTE in subquery in sql server?

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

这有效,但我真的希望能够在以下场景中使用CTE -

  • 作为SELECT中的子查询

  • 作为SELECT的FROM子句中的派生表

这两个都在PostgreSQL中工作 . 使用Sql Server 2005,我得到“关键字'附近的语法不正确'和'” .

我希望它的原因是我的大多数查询都是动态构造的,我希望能够定义CTE,将其保存在某个地方,然后根据需要将其放入更复杂的查询中 .

如果Sql Server根本不支持这种用法,我将不得不接受它,但我没有读过任何声明它不被允许的内容 .

有谁知道是否可以让这个工作?

2 回答

  • 1

    SQL Server不支持这个非常必需的功能 . 我也一直在寻求帮助 . MS SQL Server不支持临时视图,而不支持PostgreSQL . 上述解决方案也可能只有在事先生成所有CTE定义且每个子查询中都没有冲突名称时才有效 - 目的是这些CTE定义对于每个级别可能不同子查询 .

    伤心但真实!

    此致,卡皮尔

  • 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(例如仅在安装期间或作为部署的一部分),则视图是一个不错的选择 .

相关问题