SharePoint 2007 - SQL-запрос для поиска списка документов в семействе сайтов - PullRequest
4 голосов
/ 18 октября 2008

Мне нужно получить список всех документов в семействе сайтов, что, по моему мнению, я могу сделать либо с таблицей alldocs, либо с таблицей alluserdata (MOSS 2007 SP1), но не вижу, как получить информацию об авторе документ. Мне не нужно содержимое документа (например, содержимое AllDocStreams)

Примерно так:

SELECT     tp_DirName, tp_LeafName, tp_Version, tp_Modified, tp_Created
FROM         AllUserData
WHERE     (tp_ContentType = 'Document') 
AND (tp_LeafName NOT LIKE '%.css') 
AND (tp_LeafName NOT LIKE '%.jpg') 
AND (tp_LeafName NOT LIKE '%.png') 
AND (tp_LeafName NOT LIKE '%.wmf') 
AND (tp_LeafName NOT LIKE '%.gif') 
AND (tp_DirName NOT LIKE '%Template%') 
AND (tp_IsCurrentVersion = 1) 
AND (tp_LeafName NOT LIKE '%.xsl')
ORDER BY tp_SiteId, tp_ListId, tp_DirName, tp_LeafName, tp_IsCurrentVersion DESC

Есть ли лучший способ сделать это?

Ответы [ 8 ]

5 голосов
/ 07 апреля 2009

Люди, которые утверждают, что вы не можете запрашивать базы данных SharePoint, потому что они не поддерживаются, ошибаются. Прочитав документацию, можно выполнять запросы к базе данных, если вы используете предложение «With (NoLock)». Это явно не поддерживается для обновления, удаления или вставки записей.

Поддерживается следующий запрос:

Select * 
From your_content_database.dbo.AllDocs With (NoLock)

Я опубликую запрос, который даст желаемый результат через несколько минут.

4 голосов
/ 15 января 2009

Никогда не запрашивайте базу данных SharePoint напрямую. Это полностью не поддерживается и может привести к проблемам при продвижении вперед (например, если пакет обновления или исправление изменяют схему, значит ваше приложение не работает).

4 голосов
/ 19 октября 2008

Почему бы не использовать объектную модель sharepoint, а не использовать необработанный подход к базе данных? Я знаю, что подход объектной модели имеет снижение производительности по сравнению с базой данных, но MS может изменить схему БД следующим путем. С другой стороны, вероятность того, что MS нарушит свою собственную объектную модель, гораздо меньше, и, насколько мне известно, рекомендуемый способ - использовать либо объектную модель, либо веб-службы.

3 голосов
/ 07 апреля 2009

Ниже приведены 100 самых крупных документов, которые были добавлены за последние 24 часа в базу данных контента.

Select Top 100 
       W.FullUrl, 
       W.Title, 
       L.tp_Title as ListTitle, 
       A.tp_DirName, 
       A.tp_LeafName, 
       A.tp_id , 
       DS.Content , 
       DS.Size, 
       D.DocLibRowID, 
       D.TimeCreated, 
       D.Size, 
       D.MetaInfoTimeLastModified, 
       D.ExtensionForFile 
From your_content_database.dbo.AllLists L With (NoLock) 
join your_content_database.dbo.AllUserData A With (NoLock) 
  On L.tp_ID=tp_ListId 
join your_content_database.dbo.AllDocs D With (NoLock) 
  On A.tp_ListID=D.ListID 
 And A.tp_SiteID=D.SiteID 
 And A.tp_DirName=D.DirName 
 And A.tp_LeafName=D.LeafName 
join your_content_database.dbo.AllDocStreams DS With (NoLock) 
  On DS.SiteID=A.tp_SiteID 
 And DS.ParentID=D.ParentID 
 And DS.ID=D.ID 
join your_content_database.dbo.Webs W With (NoLock) 
  On W.ID=D.WebID 
 And W.ID=L.Tp_WebID 
 And W.SiteID=A.tp_SiteID 
Where DS.DeleteTransactionID=0x 
  And D.DeleteTransactionID=0x 
  And D.IsCurrentVersion=1 
  And A.tp_DeleteTransactionID=0x 
  And A.tp_IsCurrentVersion=1 
  And D.HasStream=1 
  And L.tp_DeleteTransactionId=0x 
  And ExtensionForFile not in('webpart','dwp','aspx','xsn','master','rules','xoml') 
  And D.MetaInfoTimeLastModified>DateAdd(d,-1,GetDate()) 
Order by DS.Size desc
2 голосов
/ 01 августа 2011

Я рекомендую вам взглянуть на Camelot .NET Connector, который позволяет запрашивать SharePoint 2007/2010 с использованием стандартных запросов SQL. Это драйвер ADO.NET, который также может быть предоставлен через простой сервис WCF и доступным через любой язык программирования. Допустим, вы хотели бы выбрать из «общих документов», вы написали бы что-то вроде:

select * from `shared documents`

или с определенными столбцами:

select id, title, filetype, filesize, created, createdby from `shared documents`

или с оператором where:

select id, title, filetype, filesize, created, createdby from `shared documents` where filetype = '.gif'
1 голос
/ 26 сентября 2009
  • Почему бы вам не использовать веб-часть запроса контента ?
  • Почему бы вам не использовать поисковый объект для запроса того же самого? Это было бы моим предпочтительным решением. Поиск уже имеет большинство свойств, и вы можете добавить больше, если они вам нужны. Поиск, вероятно, намного быстрее, чем запросы к базе данных контента.

Независимо от того, поддерживается ли это или нет, все же плохо обращаться к базе данных контента напрямую, и любой разработчик, который предложил бы это в качестве решения, должен получить лекцию;) Например, что произойдет, если администратор создаст в вашем веб-приложении вторую базу данных контента? Если ваш запрос распространяется на семейства сайтов, он не вернет желаемых результатов, пока вы не укажете это в коде.

0 голосов
/ 18 октября 2008

Вы можете получить некоторую информацию из таблицы UserInfo, присоединив AllUserData.tp_Author к UserInfo.tp_ID, но возиться с этими таблицами не рекомендуется и может быть очень хрупким, а также не гарантируется работа ваших запросов после применения любые исправления или пакеты обновления для SharePoint. Я бы использовал веб-сервисы или объектную модель SharePoint для доступа к данным.

0 голосов
/ 18 октября 2008

MOSS предоставляет множество веб-сервисов из коробки, которые облегчают жизнь. Их всегда стоит изучить.

Для этого конкретного случая, я думаю, будет полезна статья Получение списка файлов из библиотеки документов MOSS с использованием веб-службы SharePoint Если это не ваш точный сценарий, он выведет вас на правильный путь.

Если служба документов вам не поможет, я уверен, что служба поиска. Проверьте документацию для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...