私は次の再帰関数を持っています:
ALTER FUNCTION [dbo].[ListAncestors]
(
@Id int
)
RETURNS TABLE
As
RETURN
(
WITH cte As
(
SELECT
UserId,
ManagerId,
Forename,
Surname
FROM
dbo.Users
WHERE
UserId = @Id
UNION ALL
SELECT
T.UserID,
T.ManagerID,
T.Forename,
T.Surname
FROM
cte As C INNER JOIN dbo.Users As T
ON C.UserID = T.ManagerID
)
SELECT
Forename,
Surname
FROM
cte
);
基本的には、指定されたユーザーの下にあるすべてのユーザーの名前を(IDに基づいて)返します。私がやりたいのは、この関数を変更して、特定のuserIDが別のuserIDの祖先であるかどうかをチェックする別の関数を作成することです。
署名は次のようになると思います。
CREATE FUNCTION IsAncestor(@Id int, @AncestorId int) RETURNS BIT