Хранимая процедура 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