Как использовать поставщика OLE DB для служб каталогов в проекте служб интеграции SQL Server? - PullRequest
1 голос
/ 10 февраля 2009

Я могу настроить диспетчер соединений, который использует поставщика OLE служб каталогов и указывает на один из наших контроллеров домена. Затем в области «Поток данных» я создаю источник OLE DB и устанавливаю режим доступа к данным «Команда SQL».

Затем я использую этот запрос для извлечения данных из Active Directory:

Select employeeid, sAMaccountName
From 'LDAP://MyCompany.com'
Where objectClass = 'user'
  and objectClass = 'Person'
  and objectClass <> 'Computer'

Если я анализирую запрос, он говорит, что он анализируется правильно. Если я открою Query Builder, он выдаст мне эту ошибку.

Ошибка в предложении FROM: около 'ГДЕ'. Невозможно проанализировать текст запроса.

Затем я нажимаю кнопку ОК, и открывается Query Builder, где я могу успешно выполнить запрос и получить результаты из AD. Однако, когда я пытаюсь нажать OK, чтобы применить изменения или перейти в представление «Столбцы», я получаю эту ошибку:

Ошибка в задаче потока данных [Источник 1 OLE DB [941]]: Произошла ошибка OLE DB. Код ошибки: 0x80040E21.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Исключение из HRESULT: 0xC0202009 (Microsoft.SqlServer.DTSPipelineWrap)

Я также попытался настроить источник БД с помощью режима доступа «Команда SQL из переменной». Я установил строковую переменную со значением, являющимся запросом ... но это просто дает мне ту же ошибку.

Поскольку ошибка настолько общая, я не могу найти описание того, что на самом деле не так.

Кто-нибудь знает, как успешно использовать поставщик OLE DB для Microsoft Direcotry Services? И / или кто-нибудь знает лучший способ сделать это внутри SSIS?

1 Ответ

4 голосов
/ 09 июля 2009

Предполагая, что вы назвали связанный сервер (ваш поставщик OLE DB Active Directory) "ADSI", вот, что вам нужно:

SELECT samAccountName,
       employeeID
FROM OPENQUERY(ADSI,
  'SELECT samAccountName, employeeID
   FROM ''LDAP://MyCompany.com''
   WHERE objectClass=''Person''
   AND objectClass = ''User''
   AND NOT objectClass = ''Computer''')
...