0

我正在开发需要 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 子句中的语句移动到“内部”语句中,如下所示,我会收到“消息 7321,第 16 级,状态 2,第 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
')

我想知道是什么导致了第二个查询的错误,以及可以做些什么来让它工作。

提前感谢大家的帮助和建议!

4

0 回答 0