SQL Server 2008 では;
私は木を持っています。ノード n のすべての子ノード (図を参照) と、これらの子ノードのすべての子ノードなどを取得する必要がありますが、これは非常に簡単です。また、「ノード o を取り、m に到達するまでツリーを上っていき、m はノード n の子であるため、ノード o のプロパティをノード m のプロパティに設定する」と言うことができる必要があります。ノード o は、3 レベルの深さ (図のように) または 45 レベルの深さ、x レベルの深さである可能性があります。
これは、指定されたノード (または領域) のすべての子を取得します。
--Return all sub-area structure of an area:
WITH temp_areas (ParentAreaID, AreaID, [Name], [Level]) AS
(
SELECT ParentAreaID, AreaID, [Name], 0
FROM lib_areas WHERE AreaID = @AreaID
UNION ALL
SELECT B.ParentAreaID, B.AreaID, B.[Name], A.Level + 1
FROM temp_areas AS A, lib_areas AS B
WHERE A.AreaID = B.ParentAreaID
)
INSERT INTO @files (id) SELECT fileid FROM lib_filesareasxref where areaid in (select areaid from temp_areas)
while exists (select * from @files)
begin
select top 1
@ID = id
from
@files ORDER BY id DESC
delete from @files where id = @id