1

フォルダとファイルの2つのテーブルがあります。各テーブルには、ParentID、ID、Name、Typeの4つのフィールドがあります。

T-SQLを使用してツリー全体を一度に取得するには、CTEを作成する必要があります。これまでのところ、これは私が行ったことですが、再帰はまだアクティブではありません。

フォルダ内に1つ以上のフォルダ/ファイルがある可能性があることを忘れました。

4

1 に答える 1

2

ルート内のアイテムに使用NULLしていると仮定すると、次のように機能するはずです。ParentID

WITH FilesAndFolders AS (
    SELECT ID AS FileID, 
           CAST(NULL AS int) AS FolderID, 
           ParentID, 
           Name, 
           [Type]
    FROM File
    UNION ALL
    SELECT CAST(NULL AS int),
           ID, 
           ParentID, 
           Name, 
           [Type]
    FROM Folder
),
Tree AS (
    SELECT FileID, 
           FolderID, 
           Name, 
           [Type], 
           CAST('' AS nvarchar(MAX)) AS [Path]
    FROM FilesAndFolders
    WHERE ParentID IS NULL
    UNION ALL 
    SELECT FF.FileID, 
           FF.FolderID, 
           FF.Name, 
           FF.[Type], 
           T.[Path]+T.[Name]+'/'
    FROM FilesAndFolders FF
    JOIN Tree T ON T.FolderID = FF.ParentID
)
SELECT FileID, FolderID, [Path]+[Name] FullName, [Type]
FROM Tree
于 2012-06-20T15:18:03.957 に答える