如何在 SQL Server Integration Services 项目中使用目录服务的 OLE DB 提供程序?

Jor*_*ren 2 sql-server ssis sql-server-2005 active-directory

我可以设置一个使用目录服务 OLE 提供程序并指向我们的域控制器之一的连接管理器。然后,在“数据流”区域中,创建一个 OLE DB 源并将“数据访问模式”设置为“SQL 命令”。

然后,我使用此查询从 Active Directory 中提取数据:

Select employeeid, sAMaccountName
From 'LDAP://MyCompany.com'
Where objectClass = 'user'
  and objectClass = 'Person'
  and objectClass <> 'Computer'
Run Code Online (Sandbox Code Playgroud)

如果我解析查询,它会说它解析正确。如果我打开查询生成器,它会给我这个错误。

FROM 子句中的错误:“WHERE”附近。无法解析查询文本。

然后单击“确定”,它会打开查询生成器,我可以在其中成功运行查询并从 AD 获取结果。但是,当我尝试单击“确定”应用更改或进入“列”视图时,出现以下错误:

数据流任务 [OLE DB 源 1 [941]] 出错:发生 OLE DB 错误。错误代码:0x80040E21。

其他信息:HRESULT 异常:0xC0202009 (Microsoft.SqlServer.DTSPipelineWrap)

我还尝试使用“来自变量的 SQL 命令”访问模式设置数据库源。我设置了一个字符串变量,其值为查询...但这只是给了我同样的错误。

由于该错误非常普遍,因此我似乎无法找到实际错误的描述。

有谁知道如何成功使用 Microsoft Direcotry 服务的 OLE DB 提供程序?和/或有人知道在 SSIS 内部执行此操作的更好方法吗?

Age*_*191 5

假设您将链接服务器(您的 Active Directory OLE DB 提供程序)命名为“ADSI”,这基本上就是您所需要的:

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