here is the query you need. make sure you really need option (maxrecursion 0)
if so then yes add that in below query as well.
SET NOCOUNT ON
DECLARE @User TABLE
(
id sysname NOT NULL
,title sysname NOT NULL
)
DECLARE @Groups TABLE
(
id sysname NOT NULL
,title sysname NOT NULL
)
DECLARE @Membership TABLE
(
id INT NOT NULL
,groupid sysname NOT NULL
,memberid sysname NOT NULL
)
INSERT INTO @User( id, title ) SELECT 'myuser1','John' UNION ALL SELECT 'myuser2','Leo'
INSERT into @Groups( id, title ) SELECT 'myG1','Group1' UNION ALL SELECT 'myG2','Group2'
INSERT into @Membership( id, groupid, memberid ) SELECT 1,'myG1','myuser1' UNION ALL SELECT 2,'myG1','myG2' UNION ALL SELECT 3,'myG2','myuser2'
DECLARE @SearchUsergroup sysname='myUser2'
;WITH mType(id,title,mType)
AS
(
SELECT id,title,'user' AS mType
FROM @User
UNION ALL
SELECT id,title,'Group' AS mType
FROM @Groups
),
Ugroups(id,mType,mLevel)
AS
(
SELECT groupid,'Group' as mType, 1 AS mLevel
FROM @Membership
WHERE memberid = @SearchUsergroup
UNION ALL
SELECT ms.groupid,'Group' as mType, ug.mLevel+1 AS mLevel
FROM mType mt
JOIN Ugroups ug
ON mt.id=ug.id AND ug.mType='Group'
JOIN @Membership ms
ON ms.memberid=ug.id
)
SELECT id AS GroupID,mLevel AS MembershipLevel
FROM Ugroups