我有一个树形数据库,结构如下:
表格字段:
NodeID int
ParentID int
Name varchar(40)
TreeLevel int
我想在with子句的第一部分中使用变量@NodeID
,以便不从我感兴趣的部分开始获取所有表(请参阅Parent=@ParentID
和注释)。
with RecursionTest (NodeID,ParentID,ThemeName)
as
(
--if i remove the where from here it spends too much time (the tree is big)--
select Nodeid,ParentID,Name from TreeTable where ParentID=@ParentID
union all
select T0.Nodeid,
T0.ParentID,
T0.Name
from
TreeTable T0
inner join RecursionTest as R on T0.ParentID = R.NodeID
)
select * from RecursionTest
这引发了一些错误,但我的问题是:
提前多多感谢。
最好的问候。
何
答案 0 :(得分:7)
是。
declare @ParentID int
set @ParentID = 10;
with RecursionTest (NodeID,ParentID,ThemeName) ....
您也可以将整个内容包装在参数化的内联TVF中。这最后一种方法的例子。
CREATE FUNCTION dbo.RecursionTest (@ParentId INT)
RETURNS TABLE
AS
RETURN
(
WITH RecursionTest (NodeID,ParentID,ThemeName)
AS
(
/*... CTE definition goes here*/
)
SELECT NodeID,ParentID,ThemeName
FROM RecursionTest
)
GO
SELECT NodeID,ParentID,ThemeName
FROM dbo.RecursionTest(10)
OPTION (MAXRECURSION 0)
答案 1 :(得分:0)
不幸的是< 11g这将抛出ORA-32033 - 不支持的列别名,因为不支持此功能<那个版本