SQL сервер - залезть в древовидную структуру - PullRequest
0 голосов
/ 18 марта 2010

У меня есть таблица SQL с именем Object, которая сохраняет данные дерева в полях ObjectID, ParentID и других. Я реализовал процедуру recurse, которая выбирает все объекты по идентификатору объекта из дерева, например:

1.
1.1.
1.2.
1.2.1.
...

Теперь мне нужно «подняться» - по какому-то ObjectID мне нужно выбрать все вверх, например:

1.2.1.
1.2.
1.

Как я могу это сделать?

Например, моя процедура "down" выглядит так:

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 голосов
/ 18 марта 2010

Это для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...