Хранимая процедура upDBTreeGetFullPath

   Процедура возвращает весь путь до заданного узла в виде списка идентификаторов узлов начиная с узла первого уровня.

CREATE PROCEDURE [upDBTreeGetFullPath]
    @idDBTree INT,
    @idNode INT
 AS
    DECLARE @Error INT
    SET @Error=0
    SET NOCOUNT ON
    IF NOT Exists(SELECT * FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idNode) BEGIN
         SET NOCOUNT OFF
         RAISERROR ('Нет такого узла',16,1)
         RETURN 1
    END
    IF @@ERROR<>0 SET @Error=@@ERROR
    CREATE TABLE #TMP_FullPath (idNode INT, [Text] VARCHAR (255),L INT IDENTITY NOT NULL )
    IF @@ERROR<>0 SET @Error=@@ERROR

    DECLARE @idTheNode INT,@idTheParent INT
    SET @idTheParent=@idNode
    WHILE @idTheParent IS NOT NULL BEGIN
         INSERT #TMP_FullPath (idNode,[Text])  
              SELECT idNode,[Text] FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idTheParent
         IF @@ERROR<>0 SET @Error=@@ERROR
         SET @idTheNode=@idTheParent
         SET @idTheParent=NULL
         SELECT @idTheParent=idParent  FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idTheNode
         IF @@ERROR<>0 SET @Error=@@ERROR
    END
    IF @Error<>0 BEGIN
          DROP TABLE #TMP_FullPath
          SET NOCOUNT OFF
          RETURN 2
    END
    SET NOCOUNT OFF
    SELECT idNode,[Text] FROM #TMP_FullPath ORDER BY  L  DESC 
    SET NOCOUNT ON
    DROP TABLE #TMP_FullPath
    SET NOCOUNT OFF


Сайт управляется системой uCoz