0

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 番目のクエリのエラーの原因と、それを機能させるために何ができるかを知りたいです。

ご協力とアドバイスをいただき、ありがとうございました。

4

0 に答える 0