我正在开发一个需要SQL Server 2008 R2来查询Active Directory的应用程序的一部分。到目前为止我所做的是通过
创建链接服务器EXEC sp_addlinkedserver 'ADSI_link', 'Active Directory Service Interface', 'ADSDSOObject', 'adsdatasource'
EXEC sp_configure 'show advanced options',1
GO
reconfigure
GO
EXEC sp_configure 'Ad Hoc Distributed Queries',1
GO
reconfigure
GO
执行EXEC sp_linkedservers表示已创建到活动目录的链接服务器。下一步是将用户从活动目录导入数据库。执行如下所示的打开查询将返回它应该没有错误或任何问题的所有用户。基本上,它与以下查询完美配合。
SELECT * FROM OPENQUERY
(ADSI_link,
'SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail, department, manager, OU, userAccountControl, lockoutTime
FROM ''LDAP://DC=domain,DC=local''
WHERE objectCategory = ''Person''
AND objectCategory = ''User''
AND objectCategory <> ''Computer''
')
WHERE department <> '' AND NOT(userAccountControl & 2 <> 0) -- works just fine out here
但是,如果我要将“外部”WHERE子句中的语句移动到一个“内部”语句,如下所示,我得到一个“Msg 7321,Level 16,State 2,Line 1” 错误。
SELECT * FROM OPENQUERY
(ADSI_link,
'SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail, department, manager, OU, userAccountControl, lockoutTime
FROM ''LDAP://DC=domain,DC=local''
WHERE objectCategory = ''Person''
AND objectCategory = ''User''
AND objectCategory <> ''Computer''
AND department <> '''' AND NOT(userAccountControl & 2 <> 0) -- adding this line throws error
')
我想知道第二个查询导致错误的原因,以及允许它工作的方法。
提前感谢大家的帮助和建议!