Fra*_*man 7 sql-server subquery common-table-expression
之前已经问过这个问题 -
建议的唯一答案是"只需在顶部定义您的CTE并在子查询中访问它?"
这有效,但我真的希望能够在以下场景中使用CTE -
作为SELECT中的子查询
作为SELECT的FROM子句中的派生表
这两个都在PostgreSQL中工作.使用Sql Server 2005,我得到"关键字'附近的语法不正确'和'".
我希望它的原因是我的大多数查询都是动态构造的,我希望能够定义一个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...
Run Code Online (Sandbox Code Playgroud)
这是假设您在 SQL Server 外部构建 SQL。
您还可以考虑创建视图。视图可以包含 CTE,并且它们可以用作子查询或派生表。如果您不经常生成 SQL(例如仅在安装期间或作为部署的一部分),那么视图是一个不错的选择。
| 归档时间: |
|
| 查看次数: |
6136 次 |
| 最近记录: |