Я пытаюсь разбить запрос ADSI так, чтобы он мог быть разбит на страницы, и набор результатов извлекался по одной странице за раз.
Моя стратегия заключается в использовании запроса ADSI в SQL Dialect с чем-то вроде этого. Ниже приведен псевдокод:
iteration #1
select top COUNT_RECORDS_IN_PAGE from
(
select columns
from 'ADsPath'
order by unique-column
)
iteration #2
select top COUNT_RECORDS_IN_PAGE from
(
select columns
from 'ADsPath'
where unique-column > (max unique-column from iteration #1)
order by unique-column
)
etc.
Для этого требуется уникальный столбец для разделения результатов. В предыдущих запросах я успешно использовал sAMAccountName
. Но мой новый запрос ADSI возвращает Active Directory Контейнеры и Организационные единицы , объекты, которые не имеют значения sAMAccountName
.
Я пытался использовать distinguishedName
в качестве уникального столбца, но, по-видимому, возникают проблемы с сортировочным столбцом, зависящим от функционального уровня домена. (Ссылка: статья Microsoft )
Я сейчас пытаюсь заставить objectGUID
работать как столбец разделения. Но у меня проблемы с порядком значений GUID. Предложение order by
сортирует GUID по их шестнадцатеричным значениям. Например:
0x007A6F38405C6F40AADF38EAEBCE9E1D
0x02CC1023EBF40B4C84DFAC3B0F270014
0x0327CBA556ECA640861F56030D79EFEB
0x0345F98337FD2242964E5A62145FF751
Но предложение where objectGUID > '0x0345F98337FD2242964E5A62145FF751'
не дает ожидаемых результатов. Меня беспокоит, что оператор сравнения >
может не использовать тот же порядок, что и предложение order by
. Возможно, он использует какой-то другой порядок байтов.
Вопросы:
- Что оператор сравнения
>
делает с GUID в запросе ADSI? - Есть ли способзаставить мою стратегию подкачки работать с GUID?
- Есть ли другие способы решения проблемы подкачки? Другие схемы разделов?
(В случае, если это имеет значение, моей реальной платформой будет Сервисные интерфейсы Active Directory Связанный сервер внутри SQL Server.)