При использовании связанного сервера к AD, может возникнуть проблема получения всех записей из AD.
Поскольку есть ограничения по количеству строк для запроса к LDAP .
Windows Server 2008 and newer domain controller returns only 5000 values in a LDAP response
Самый простой вариант разбить запрос на несколько частей по любому признаку, самое логичное по sAMAccountname
Таким образом один запрос превращается в два, три и тд.
SELECT NAME,
givenName,
SN,
sAMAccountname,
mail,
company,
division,
department,
manager,
userAccountControl,
ObjectGuid,
CASE
WHEN ad.accountexpires IN ('9223372036854775807', '0', '129895740000000000') THEN
'9999-12-31'
ELSE DATEADD(
mi,
(CAST(ad.accountExpires AS BIGINT) / 600000000)
+ DATEDIFF(Minute, GETUTCDATE(), GETDATE()),
CAST('1/1/1601' AS DATETIME2)
)
END AS AccountExpiresDate
FROM OPENQUERY(
AD_SERVER,
'select Name, givenName, SN, sAMAccountname, mail, company,division,department,manager, userAccountControl,ObjectGuid,accountExpires from ''LDAP://DC=domen,DC=ru'' WHERE sAMAccountname < ''L'' and objectClass=''user'''
) AS AD






