Sql server 从AD创建员工和经理列表
我有一张员工及其经理的表格:Sql server 从AD创建员工和经理列表,sql-server,sql-server-2008,sql-server-2008-r2,recursive-query,Sql Server,Sql Server 2008,Sql Server 2008 R2,Recursive Query,我有一张员工及其经理的表格: -- Show the contents of the table SELECT * FROM ActiveDirectory.dbo.ADUser Last First ManagerDN Johnson Brent CN=Jones\, Bob,OU=IT Poleman Debbie CN=Jones\, Bob,OU=IT Kismain Lenni CN=Jones\, Bob,OU=IT Braisw
-- Show the contents of the table
SELECT * FROM ActiveDirectory.dbo.ADUser
Last First ManagerDN
Johnson Brent CN=Jones\, Bob,OU=IT
Poleman Debbie CN=Jones\, Bob,OU=IT
Kismain Lenni CN=Jones\, Bob,OU=IT
Braiswool Marc CN=Jones\, Bob,OU=IT
Garpial Pat CN=Johnson\, Brent,OU=IT
McKinnis Laurie CN=Kismain\, Lenni,OU=IT
Thomason Maddy CN=Poleman\, Debbie,OU=IT
Dodgers Kevin CN=Thomason\, Maddy,OU=IT
我想创建一个员工、他们的经理和他们的经理的列表。为简单起见,假设可以有3个级别:
LastName FirstName ManagerDN3 ManagerDN2 ManagerDN1
CN=Braiswool\, Marc,OU=IT CN=Jones\, Bob,OU=IT
CN=Garpial\, Pat,OU=IT CN=Johnson\, Brent,OU=IT CN=Jones\, Bob,OU=IT
CN=McKinnis\,Laurie,OU=IT CN=Kismain\, Lenni,OU=IT CN=Jones\, Bob,OU=IT
CN=Thomason\, Maddy,OU=IT CN=Poleman\, Debbie,OU=IT CN=Jones\, Bob,OU=IT
Dodgers Kevin CN=Thomason\, Maddy,OU=IT CN=Poleman\, Debbie,OU=IT CN=Jones\, Bob,OU=IT
以下是创建和填充表的代码:
-- Create the ADUser table
CREATE TABLE [dbo].[ADUser](
[Last] [nvarchar](50) NOT NULL,
[First] [nvarchar](50) NOT NULL,
[ManagerDN] [nvarchar](50) NOT NULL
)
-- Populate the ADUser table
INSERT INTO [ActiveDirectory].[dbo].[ADUser]
([Last]
,[First]
,[ManagerDN])
SELECT 'Johnson','Brent','CN=Jones\, Bob,OU=IT'
UNION ALL
SELECT 'Poleman','Debbie','CN=Jones\, Bob,OU=IT'
UNION ALL
SELECT 'Kismain','Lenni','CN=Jones\, Bob,OU=IT'
UNION ALL
SELECT 'Braiswool','Marc','CN=Jones\, Bob,OU=IT'
UNION ALL
SELECT 'Garpial','Pat','CN=Johnson\, Brent,OU=IT'
UNION ALL
SELECT 'McKinnis','Laurie','CN=Kismain\, Lenni,OU=IT'
UNION ALL
SELECT 'Thomason','Maddy','CN=Poleman\, Debbie,OU=IT'
UNION ALL
SELECT 'Dodgers','Kevin','CN=Thomason\, Maddy,OU=IT'
然后我可以查询每个列:
-- Show the Level2 Managers (ManagerDN2)
SELECT Last, First, ManagerDN FROM dbo.ADUser
WHERE ManagerDN = 'CN=Jones\, Bob,OU=IT'
-- Show the Level3 Managers (ManagerDN3)
SELECT Last, First, ManagerDN FROM dbo.ADUser
WHERE ManagerDN IN
( SELECT 'CN=' + Last + '\, ' + First + ',OU=IT'
FROM dbo.ADUser
WHERE ManagerDN = 'CN=Jones\, Bob,OU=IT'
)
-- Show the Employees
SELECT Last, First, ManagerDN FROM dbo.ADUser
WHERE ManagerDN IN
(
SELECT 'CN=' + Last + '\, ' + First + ',OU=IT'
FROM dbo.ADUser
WHERE ManagerDN IN
( SELECT 'CN=' + Last + '\, ' + First + ',OU=IT'
FROM dbo.ADUser
WHERE ManagerDN = 'CN=Jones\, Bob,OU=IT'
)
)
如何有效地创建员工及其经理及其经理的列表
谢谢为什么不为每个用户提供一个唯一的Id 然后,您可以使用具有此Id的外键链接到某人的经理
但是,如果设置了模式,并且没有办法更改它,您可以查找。我喜欢它!递归CTE非常适合这种情况。