Хранимая процедура upDBTreeDeleteNode.
 
  Процедура удаляет заданный узел. 
  Узел не должен содержать вложенные узлы.Иначе происходит возбуждение искл.ситуации.

CREATE PROCEDURE [upDBTreeDeleteNode] 
   @idDBTree INT,
   @idNode INT
AS
    DECLARE @Error INT
    SET @Error=0

    IF NOT Exists(SELECT *  FROM DBTree  WHERE idDBTree=@idDBTree AND idNode=@idNode) BEGIN
          RAISERROR ('Нет такого узла',16,1)
          RETURN 1
    END
    IF @@ERROR<>0 SET @Error=@@ERROR
    DECLARE @idPrior int,@idNext int, @idParent int,@idFirstChild int
    SELECT @idPrior=idPrior, @idNext=idNext,@idParent=idParent,@idFirstChild=idFirstChild FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idNode
    IF @@ERROR<>0 SET @Error=@@ERROR
    IF @idFirstChild  IS NOT NULL BEGIN     
          RAISERROR ('Этот узел удалить нельзя,т.к. есть вложенные узлы.',16,1)      
          RETURN 2
    END
    IF @@ERROR<>0 SET @Error=@@ERROR
    BEGIN TRAN
    DECLARE @CanDelete INT
    EXEC @CanDelete=upDBTreeRemoveNode @idDBTree,@idNode
    IF @@ERROR<>0 SET @Error=@@ERROR
    IF @CanDelete=0
      BEGIN
           DELETE DBTree WHERE idDBTree=@idDBTree AND idNode=@idNode
           IF @@ERROR<>0 SET @Error=@@ERROR
           IF @Error=0
                 COMMIT TRAN
           ELSE BEGIN
                 ROLLBACK TRAN
                 RETURN 1
           END 
      END
    ELSE BEGIN
          ROLLBACK TRAN
          RETURN 2
    END


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