sql - CTE 查询 SQL 服务器中的解析错误

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

我已经编写了一个 CTE 查询,并且正在 Microsoft SQL Server 2008 R2 Management Studio 中执行该查询:

WITH DependencyHierarchy(processName, dependProcessName) AS
(
    SELECT
       processName,
       dependProcessName,
       1 as HierarchyLevel
    FROM processDependency

    UNION ALL

    SELECT
        e.processName,
        e.dependProcessName,
        eh.HierarchyLevel + 1 AS HierarchyLevel
    FROM 
        processDependency e
    INNER JOIN 
        DependencyHierarchy eh ON e.dependProcessName = eh.processName
)
SELECT *
FROM DependencyHierarchy
ORDER BY HierarchyLevel, processName, dependProcessName;
GO

它抛出这个错误:

There was an error parsing the query. [ Token line number = 1,Token line offset = 1,Token in error = WITH ]

表格有这个数据:

    processName dependProcessName
    P1          P2
    P2          P3
    P3          P4
    P4          P5
    P6          P7

最佳答案

WITH common_table_expression:

column_name

Specifies a column name in the common table expression. Duplicate names within a single CTE definition are not allowed. The number of column names specified must match the number of columns in the result set of the CTE_query_definition.

The list of column names is optional only if distinct names for all resulting columns are supplied in the query definition.

将列 HierarchyLevel 添加到 cte 列列表:

WITH DependencyHierarchy(processName,dependProcessName, HierarchyLevel)
AS
(
   ...
)

LiveDemo

或将其留空(列名将派生自第一个 SELECT):

WITH DependencyHierarchy AS
(
   ...
)

LiveDemo2

关于sql - CTE 查询 SQL 服务器中的解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429695/

相关文章:

sql - 从 INSTEAD OF TRIGGER 获取 ROWCOUNT

sql - 如何从 Pandas 表中的先前加载中选择大于文件中存储的最大时间戳的记录

sql-server - 查找列依赖性

sql-server - 如何强制文件流垃圾收集器以最高优先级完成其工作?

SQL 连接以获取 3 列中的 2 列的笛卡尔积

mysql - 在 MySQL 中通过内部连接使用更新语句查找和替换

sql-server - 是否可以获得在 SQL Server 上运行的应用程序的客户端进程 ID?

c# - 防止在 ASP.NET 中与 ADO.NET 并发执行存储过程

用于发送电子邮件的 SQL Server 存储过程

sql-server-2008 - 在 SQL2012 实例上运行 SSIS 2008 包