当我尝试为用户查询 AD 时,我收到以下错误:
无法从链接服务器“ADSI”的 OLE DB 提供程序“ADsDSOObject”中获取一行。
我假设问题是由于 1000 行限制(或 SqlServer 2008 中的 901 行)。我可以分页查询,但我正在寻找可以让我一次检索 1000 多个的解决方法。
如果有帮助,我正在使用 SqlServer 2008 R2。
这是我的查询
SELECT samaccountname AS Account, ISNULL(givenName, '''') AS givenName, ISNULL(SN, '''') AS SN, ISNULL(DisplayName, '''') as DisplayName, ISNULL(Title, '''') AS Title
FROM OpenQuery(ADSI,
'SELECT SamAccountName, givenName, SN, DisplayName, Title
FROM ''LDAP://corpdomain.corp''
WHERE objectClass = ''User'' and (SN = ''*'' or givenName = ''*'')')
有任何想法吗?
编辑 -
经过进一步检查,我意识到我也无法正确分页此查询。有没有人对可以让我分页结果的解决方案或可以让我返回超过 901 的解决方法有任何提示?
最佳答案
问题
SELECT samaccountname AS Account, ISNULL(givenName, '''') AS givenName, ISNULL(SN, '''') AS SN, ISNULL(DisplayName, '''') as DisplayName, ISNULL(Title, '''') AS Title
FROM OpenQuery(ADSI,
'SELECT SamAccountName, givenName, SN, DisplayName, Title
FROM ''LDAP://corpdomain.corp''
WHERE objectClass = ''User'' and (SN = ''*'' or givenName = ''*''
我的解决方法
我刚刚解决了我面临的同样问题,通过优化应用分页(并且我成功地能够从 AD 检索大约 50k 登录,并且不会丢失从 AD 域获取单个登录帐户):
您需要通过遍历属性的字符来解决 ADSI 查询限制。在此处查看解决方案:http://www.sqlservercentral.com/Forums/Topic231658-54-1.aspx#bm1249991
通过在
SELECT TOP 901 ...
的地方写入 SELECT
解决了该错误。是的,这个问题与使用 SqlServer 2008 R2 有关。这个问题是我从 2005 年迁移到 2008 年数据库后出现的,因为在 SQL Server 2008 中,有 901 行的限制,而在 SQL Server 2005 中是 1000(不同的是我们需要写 select TOP 901,这不是在 SQL Server 2005 中需要,否则程序将失败并显示错误)