2010-12-06 12 views
1

J'ai le CTE ci-dessous qui fonctionne bien en remaniant une table d'employés et en construisant une liste étendue de l'id d'employé qui lui a été transmise ainsi que tous les rapports directs et indirects.Modifier CTE pour référencer un autre champ?

Je suis en train de faire un CTE soeur d'utiliser le nom d'utilisateur au lieu de id employé, mais je reçois aucune donnée de retour après que je fais les changements ...

Voici mon code de travail avec employeeID, comment Je reçois cela fonctionne avec NTID (employé) et managerNTID (manager)

CREATE FUNCTION fnGetEmployeeHierarchy 
( 
    @EmployeeId int = null 
) 
RETURNS TABLE 
AS 
RETURN 
( 
    WITH yourcte AS 
    ( 
    SELECT EmployeeId, ManagerID, NTID, FullName--, Name 
    FROM Employees 
    WHERE EmployeeId = isnull(@EmployeeId,EmployeeId) 
    UNION ALL 
    SELECT e.EmployeeId, e.ManagerID, e.NTID, e.FullName--, e.Name 
    FROM Employees e 
    JOIN yourcte y ON e.ManagerID = y.EmployeeId 
) 
SELECT EmployeeId, ManagerID, NTID, FullName--, Name 
FROM yourcte 
) 

Répondre

0

en supposant que managerNTID référence à la colonne NTID du gestionnaire - essayez ceci:

CREATE FUNCTION fnGetEmployeeHierarchyNew(@EmployeeNTID int = null) 
RETURNS TABLE 
AS 
    RETURN 
    ( 
    WITH NewCTE AS 
    ( 
     SELECT EmployeeId, ManagerID, NTID, FullName--, Name 
     FROM Employees 
     WHERE NTID = ISNULL(@EmployeeNTID, EmployeeNTID) 

     UNION ALL 

     SELECT e.EmployeeId, e.ManagerID, e.NTID, e.FullName--, e.Name 
     FROM Employees e 
     JOIN NewCTE y ON e.ManagerNTID = y.NTID 
    ) 
    SELECT EmployeeId, ManagerID, NTID, FullName--, Name 
    FROM NewCTE 
) 
+0

J'ai corrigé cette ligne: WHERE NTID = ISNULL (@EmployeeNTID, EmployeeNTID) tel qu'il est: WHERE NTID = ISNULL (@UserName, NTID) parce que la relation analogue entre employeeID et managerID est actuellement NTID et managerNTID. même avec ce corrigé je reçois des erreurs de syntaxe. des idées? – kacalapy

+0

@kacalapy: erreurs de syntaxe ** où ** ?? Quelle ligne, quelle déclaration ?? –