【问题标题】:Is there any way to do select on top of WITH clause in a SQL Server CTE?有没有办法在 SQL Server CTE 中的 WITH 子句之上进行选择?
【发布时间】:2018-03-19 17:18:52
【问题描述】:

我有一个正常工作的 CTE 查询。我在一个应用程序中使用这个查询,它在它上面选择并给出错误

WITH 附近的语法不正确

有什么方法可以在 WITH 之上进行选择吗?

select(columns) from
(WITH CTE AS(
     #code
))

【问题讨论】:

    标签: sql sql-server tsql common-table-expression


    【解决方案1】:

    很遗憾,SQL Server 不支持这种语法 DBFiddle Demo。你需要重写你的查询:

    WITH CTE AS(
         #code
    )
    SELECT *
    FROM CTE;
    

    或者用视图包装你的查询并从中选择。

    【讨论】:

    • 我的查询在执行时运行良好。这里的问题是我无法控制的应用程序并在我的查询之上进行选择。
    • @gdanton 我将在 CTE 之上创建视图并允许应用程序查询视图。
    • 好的。感谢您的回复。
    【解决方案2】:

    先声明 CTE,然后在下面的语句中从中选择

    ;WITH cte AS 
    (
     select 1 AS col
    )
    SELECT col
    FROM cte
    

    【讨论】:

      【解决方案3】:

      删除 with 子句并执行

      select col1, col2, col3 from
      (select col1, col2, col3 from table  ) as CTE
      

      唯一的缺点是派生表只能使用一次,不像真正的 CTE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        • 2020-06-11
        • 1970-01-01
        相关资源
        最近更新 更多