Sos*_*osi 4 sql t-sql sql-server sql-server-2005
我有一个树形数据库,具有以下结构:
表字段:
NodeID int
ParentID int
Name varchar(40)
TreeLevel int
Run Code Online (Sandbox Code Playgroud)
我想@NodeID在with子句的第一部分中使用一个变量,而不是从我感兴趣的部分开始获取所有表(参见where Parent=@ParentID和comment).
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
Run Code Online (Sandbox Code Playgroud)
这会引发一些错误,但我的问题是:
非常感谢提前.
最好的祝福.
何塞
是.
declare @ParentID int
set @ParentID = 10;
with RecursionTest (NodeID,ParentID,ThemeName) ....
Run Code Online (Sandbox Code Playgroud)
您也可以将整个内容包装在参数化的内联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)
Run Code Online (Sandbox Code Playgroud)