分层SQL查询不返回级别

时间:2010-05-19 20:37:47

标签: sql-server hierarchical-data

我有一个典型的SQL Server分层查询:

WITH bhp AS (
   SELECT name, 0 AS level
   FROM dbo.BhpNode
   WHERE parent_id IS NULL
   UNION ALL
   SELECT a.name, level + 1
   FROM dbo.BhpNode a
   INNER JOIN dbo.BhpNode b
      ON b.bhp_node_id = a.parent_id )
  SELECT * FROM bhp

这似乎与我在网络上发现的分层查询的各种示例相匹配,但由于某种原因,它产生了这个错误:

  

Msg 207,Level 16,State 1,Line 12
  列名称“级别”无效。

我确定我错过了一些明显的东西,但我已经盯着它看了太长时间。知道我哪里错了吗?

2 个答案:

答案 0 :(得分:3)

您的查询不是递归的 - 您必须在递归CTE的第二部分内选择bhp。试试这个:

WITH bhp AS (
   SELECT *, 0 AS [level]
   FROM dbo.BhpNode
   WHERE parent_id IS NULL
   UNION ALL
   SELECT b.*, [level] + 1
   FROM bhp a
   INNER JOIN dbo.BhpNode b
   ON a.bhp_node_id = b.parent_id)
SELECT * FROM bhp

答案 1 :(得分:1)

在CTE的递归部分,您引用的其中一个表应该是CTE本身,不应该吗?目前您只是自我加入BhpNode,而且本身没有level列。