Active Directory にクエリを実行するために SQL Server 2008 R2 を必要とするアプリケーションの一部を開発しています。私がこれまでに行ったことは、次のようにしてリンクサーバーを作成することです
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 を実行すると、Active Directory へのリンク サーバーが作成されたことが示されます。次のステップは、Active Directory からデータベースにユーザーを取得することです。次のようなオープンクエリを実行すると、エラーや問題が発生することなく、すべてのユーザーが返されます。基本的に、次のクエリで完全に機能します。
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
')
2 番目のクエリのエラーの原因と、それを機能させるために何ができるかを知りたいです。
ご協力とアドバイスをいただき、ありがとうございました。