2010-12-06 50 views
1

我在下面的CTE中很好地工作,重新詛咒員工表並建立傳遞給它的員工ID的擴展列表以及所有直接和間接報告。修改CTE引用另一個字段?

我試圖讓一個妹妹CTE使用的用戶名,而不是員工ID,但我沒有得到任何數據傳回後,我所做的更改...

這裏是employeeID我的工作代碼,如何能我得到這個與NTID(員工)和managerNTID(經理)工作

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 
) 

回答

0

假設managerNTID引用經理的NTID列 - 試試這個:

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

我修正了這一行:WHERE NTID = ISNULL(@EmployeeNTID,EmployeeNTID),因此它是:WHERE NTID = ISNULL(@UserName,NTID),因爲employeeID和managerID之間的非法關係實際上是NTID和managerNTID。即使這個固定我得到語法錯誤。想法? – kacalapy 2010-12-06 18:24:25

相關問題