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