アドバンテージ データベース サーバーを使用しています。
私は 1 つのテーブルを持っておりAreas
、親領域のすべての子ノードを見つけたいと考えています。
テーブルと列の名前は次のとおりです。
Areas
(
AreaID INTEGER
, Name NVARCHAR(50)
, Code NVARCHAR(50)
)
ストアド プロシージャは次のとおりです。
CREATE PROCEDURE GetAreaLocations
(
AreaID INTEGER
, AreaOutID INTEGER OUTPUT
, AreaName NVARCHAR(100) OUTPUT
, AreaCode NVARCHAR(50) OUTPUT
, WithParent NVARCHAR(100) OUTPUT
, DepthSpace NVARCHAR(50) OUTPUT
, Depth INTEGER OUTPUT
, ParentID INTEGER OUTPUT
)
BEGIN
DECLARE
AID INTEGER
, depthid INTEGER
, tempdepth INTEGER
, depthspaceid NVARCHAR(50)
;
AID = (SELECT AreaID FROM __input);
depthid = 1;
depthspaceid = '';
INSERT INTO
__output
SELECT TOP 50
A.AreaID
, A.Name
, A.Code
, (SELECT Name + '->' + A.Name FROM Areas WHERE AreaID = A.ParentID)
, depthspaceid
, depthid
, AID
FROM
Areas A
WHERE
A.ParentID = AID
ORDER BY
A.AreaID ASC
;
IF (SELECT COUNT(AreaOutID) FROM __output) > 0 THEN
SELECT TOP 1
AID = AreaOutID
, depthid = Depth
FROM
__output
WHERE
ParentID = AID
ORDER BY
AreaOutID ASC
;
WHILE depthid > 0 DO
WHILE AID > 0 DO
INSERT INTO
__output
SELECT
AreaID
, Name
, Code
, Name
, (SELECT CASE WHEN WithParent IS NULL THEN '' ELSE WithParent + '->' + Name END FROM __output WHERE AreaOutID=AID)
, depthspaceid
, depthid + 1
, AID
FROM
Areas
WHERE
ParentID = AID
;
AID = ISNULL((SELECT TOP 1 AreaOutID FROM __output WHERE Depth=depthid and AreaOutID > AID ORDER BY AreaOutID ASC),0);
END WHILE;
tempdepth = depthid;
AID = 0;
depthid = 0;
SELECT TOP 1
depthid = Depth
, AID = AreaOutID
FROM
__output
WHERE
depthid > tempdepth
ORDER BY
depthid ASC
, AreaOutID ASC
;
WND WHILE;
END IF;
END;
複数の行を返すサブクエリに関するエラーが発生しています。
何が原因で、どのように修正するのですか?