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

   Процедура возвращает идентификаторы всех вложенных узлов в заданный.
   @idParent не должен быть NULL.
   Если @WithParent<>0 , то @idParent добавляется к результату

CREATE PROCEDURE [upDBTreeGetAllNodes] 
   @idDBTree INT,
   @idParent INT, 
   @WithParent INT=1
AS
   DECLARE @Error INT
   SET @Error=0

   IF @idParent IS NULL BEGIN
         RAISERROR ('@idParent не может быть NULL',16,1)
         RETURN 1
   END
   IF @@ERROR<>0 SET @Error=@@ERROR
   SET NOCOUNT  ON

   IF OBJECT_ID('#TMP_AllNodes') IS NOT NULL
       DROP TABLE #TMP_AllNodes
   IF @@ERROR<>0 SET @Error=@@ERROR
   CREATE TABLE #TMP_AllNodes  (idNode INT,[Text] VARCHAR(255),Checked BIT NOT NULL)
   IF @@ERROR<>0 SET @Error=@@ERROR

   IF @WithParent<>0
       INSERT #TMP_AllNodes
           SELECT idNode,[Text],0  FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idParent
   IF @@ERROR<>0 SET @Error=@@ERROR
  
   DECLARE @idTheNode INT
   SET @idTheNode=@idParent

   WHILE @idTheNode IS NOT NULL BEGIN
         INSERT #TMP_AllNodes
             SELECT idNode,[Text],0  FROM DBTree WHERE idDBTree=@idDBTree AND idParent=@idTheNode
         IF @@ERROR<>0 SET @Error=@@ERROR
         UPDATE #TMP_AllNodes SET Checked=1 WHERE idNode=@idTheNode
         IF @@ERROR<>0 SET @Error=@@ERROR
         SET @idTheNode=NULL
         SELECT TOP 1 @idTheNode=idNode FROM #TMP_AllNodes WHERE Checked=0
         IF @@ERROR<>0 SET @Error=@@ERROR
   END

   IF @Error<>0 
     BEGIN
           DROP TABLE #TMP_AllNodes
           SET NOCOUNT OFF
           RETURN 2 
     END
   ELSE BEGIN
        SET NOCOUNT OFF
        SELECT idNode,[Text] FROM #TMP_AllNodes
        SET NOCOUNT ON
        DROP TABLE #TMP_AllNodes
        SET NOCOUNT OFF
   END


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