НЕ ЗАПРОСИТЕ БАЗУ ДАННЫХ SHAREPOINT ПРЯМО!
Интересно, объяснил ли я это достаточно ясно? :)
Вам действительно нужно взглянуть на объектную модель, доступную в C #, вам нужно получить экземпляр SPSite для SiteCollection, а затем перебрать экземпляры SPList, принадлежащие объектам SPSite и SPWeb.
Получив объект SPList, вам нужно будет вызвать GetListItems, используя запрос, который фильтрует пользователя, которого вы хотите.
Это поддерживаемый способ делать то, что вы хотите.
Вы никогда не должны обращаться к базе данных напрямую, поскольку SharePoint вообще не предназначен для этого, и нет никакой гарантии (фактически, есть конкретное предупреждение), что структура базы данных будет одинаковой между версиями и обновлениями, и Кроме того, когда содержимое распространяется на несколько баз данных контента в ферме, нет гарантии, что запрос, выполняющийся в одной базе данных контента, будет делать то, что вы ожидаете, в другой базе данных контента.
Когда вы смотрите на объектную модель для итерации, также обратите внимание, что вам нужно будет утилизировать () создаваемые вами объекты SPSite и SPWeb.
О, да, у вас может быть 400 пользователей, но я бы поспорил, что у вас 30 сайтов. Информация повторяется в базе данных на сайт ... 30 x 400 = 12 000 записей в базе данных.