SQL服务器 - 爬上树形结构

时间:2010-03-18 15:47:02

标签: sql sql-server tree

我有一些名为Object的sql表,它将树数据保存在ObjectID,ParentID等字段中。我已经实现了recurse过程,它从树中选择了objectID所有内容,如下所示:

1.
1.1.
1.2.
1.2.1.
...

现在需要“爬上来” - 通过一些ObjectID,我需要选择Up,就像这样:

1.2.1.
1.2.
1.

我怎么能这样做?

在示例中,我的“向下”过程如下所示:

ALTER PROCEDURE [dbo].[Object_SelectDownByRoot_Simple]
@ObjectID int

AS
WITH tree (ObjectID, ParentID, ObjectName, ObjectCode) AS
(
    SELECT  ObjectID, ParentID, ObjectName, ObjectCode
     FROM dbo.[ObjectQ] ofs
     WHERE( ObjectID = @ObjectID )

     UNION ALL

     SELECT     ofs.ObjectID, ofs.ParentID, ofs.ObjectName, ofs.ObjectCode
      FROM dbo.[ObjectQ] ofs
      JOIN tree ON tree.ObjectID = ofs.ParentID
)

SELECT  
ObjectID, ParentID, ObjectName, ObjectCode
FROM tree

1 个答案:

答案 0 :(得分:0)

这适用于Microsoft SQL Server 2005吗? 2008?

尝试这样的事情;

CREATE PROCEDURE getParentIDs
ID as int,
level as int
AS
GO

ALTER PROCEDURE getParentIDs
ID as int,
level as int
AS

DECLARE @P as int /* <-- change to your ObjectID datatype */

SELECT @P=ParentID FROM tree WHERE ObjectID = ID

SELECT @P, level
UNION ALL
getParentIDs , 1+level   /* <-- this might not work... :-/ */
GO