Хранимая процедура upDBTreeAddNode.
Процедура добавляет вложенный узел к заданному родительскому узлу последним в списке вложенных.
Если @idParent = NULL , то узел добавляется на первый уровень дерева и становится последним в
списке узлов первого уровня.
При добавлении узла происходит проверка на правильность всех параметров.
Если задан @idNode, то исп. это значение для нового узла.Если нет, то значение генерится сервером.
CREATE PROCEDURE [upDBTreeAddNode]
@idDBTree INT,
@idParent INT,
@idPrior INT,
@idNext INT,
@Text VARCHAR(255),
@idNode int = NULL out
AS
DECLARE @Error INT
SET @Error=0
SET NOCOUNT ON
-- Проверка параметров
IF @idPrior IS NOT NULL
BEGIN
DECLARE @idPriorNext int
SELECT @idPriorNext=idNext FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idPrior
IF @@ERROR<>0 SET @Error=@@ERROR
IF @idNext<>@idPriorNext BEGIN
SET NOCOUNT OFF
RAISERROR ('Неправильно указаны параметры',16,1)
RETURN 1
END
END
ELSE IF @idNext IS NOT NULL
BEGIN
DECLARE @idNextPrior int
SELECT @idNextPrior=idPrior FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idNext
IF @@ERROR<>0 SET @Error=@@ERROR
IF @idPrior<>@idNextPrior BEGIN
SET NOCOUNT OFF
RAISERROR ('Неправильно указаны параметры',16,1)
RETURN 2
END
END
ELSE IF @idParent IS NOT NULL BEGIN
DECLARE @idParentFirstChild int
SELECT @idParentFirstChild=idFirstChild FROM DBTree WHERE idDBTree=@idDBTree AND idNode=@idParent
IF @@ERROR<>0 SET @Error=@@ERROR
IF @idParentFirstChild IS NOT NULL BEGIN
SET NOCOUNT OFF
RAISERROR ('Неправильно указаны параметры',16,1)
RETURN 3
END
END
-- Добавдение нового узла
BEGIN TRAN
IF @idNode IS NULL
BEGIN
INSERT DBTree (idDBTree,[Text],idParent,idPrior,idNext) VALUES (@idDBTree,@Text,@idParent,@idPrior,@idNext)
IF @@ERROR<>0 SET @Error=@@ERROR
SELECT @idNode=@@IDENTITY
IF @@ERROR<>0 SET @Error=@@ERROR
END
ELSE BEGIN
SET IDENTITY_INSERT NewData..DBTree ON
IF @@ERROR<>0 SET @Error=@@ERROR
INSERT DBTree (idDBTree,[Text],idParent,idPrior,idNext,idNode) VALUES (@idDBTree,@Text,@idParent,@idPrior,@idNext,@idNode)
IF @@ERROR<>0 SET @Error=@@ERROR
SET IDENTITY_INSERT NewData..DBTree OFF
IF @@ERROR<>0 SET @Error=@@ERROR
END
IF @idPrior IS NOT NULL
UPDATE DBTree SET idNext=@idNode WHERE idDBTree=@idDBTree AND idNode=@idPrior
IF @@ERROR<>0 SET @Error=@@ERROR
IF @idNext IS NOT NULL
UPDATE DBTree SET idPrior=@idNode WHERE idDBTree=@idDBTree AND idNode=@idNext
IF @@ERROR<>0 SET @Error=@@ERROR
IF @idParent IS NOT NULL AND @idPrior IS NULL AND @idNext IS NULL
UPDATE DBTree SET idFirstChild=@idNode WHERE idDBTree=@idDBTree AND idNode=@idParent
IF @@ERROR<>0 SET @Error=@@ERROR
SET NOCOUNT OFF
IF @Error=0 BEGIN
COMMIT TRAN
SELECT @idNode NewId
END ELSE BEGIN
ROLLBACK TRAN
RETURN 4
END
Сайт управляется системой
uCoz