私は SQL Server 2008 を使用しています。2 つの列を持つグループへのユーザーアクセスの詳細を示すテーブルがuserid int
ありgroupid int
ますtbl_access
。各ユーザーは、ツリーの任意のレベルで複数のグループにアクセスできます。
3 つの列を持つツリー構造を定義するグループの 2 番目のテーブルgroupid int
がありgroupfather int
ます。groupfather
tbl_groups
userid
を指定すると、関数は でユーザーがアクセスできるすべてのグループを検索し、グループtbl_access
ごとにすべての子ノードを見つけて、ユーザーがすべてのグループの結合された個別のリストを返す関数を作成しようとしています。にアクセスできます)。
CTE を使用してみましたが、すべてのグループのすべての子ノードではなく、1 つのグループのすべての子ノードを取得することしかできませんでした。
私が今持っているのは:
CREATEFUNCTION [DBO].[FUNC_ALL_CHILDGROUPS] (@GROUPID INT)
RETURNS TABLE
AS
RETURN (
WITH ALLGROUPS (GROUPID, GROUPFATHER) AS
(
SELECT GROUPID, GROUPFATHER
FROM
TBL_GROUPS
WHERE GROUPID = @GROUPID
UNION ALL
SELECT TBL_GROUPS.GROUPID, TBL_GROUPS.GROUPFATHER
FROM
TBL_GROUPS
INNER JOIN ALLGROUPS
ON TBL_GROUPS.GROUPFATHER = ALLGROUPS.GROUPID
)
SELECT * FROM ALLGROUPS