我正在处理一个需要使用 SQL 查询来获取有关网站集和 Web 的一些信息的 sharepoint project.it。我正在使用 sharepoint 2010:
SELECT
Webs.Title AS [Site Title]
, Webs.FullUrl AS [Site Url]
, Lists.tp_Title AS [List/Library Title]
, COUNT(*) AS [Total GIF]
, CAST( CAST(SUM(Docs.Size) AS FLOAT) / 1024.0 AS DECIMAL(10,3) ) AS [Size (KB)]
FROM Docs
INNER JOIN Webs On Docs.WebId = Webs.Id
INNER JOIN Sites ON Webs.SiteId = Sites.Id
INNER JOIN Lists ON Docs.ListId = Lists.tp_ID
WHERE Docs.Type <> 1
AND Docs.LeafName LIKE '%.gif'
AND Docs.LeafName NOT LIKE 'template%'
GROUP BY
Webs.FullUrl
, Webs.Title
, Lists.tp_Title
ORDER BY
[Site Url]
, [List/Library Title]
, [Total Gif]
, [Size (KB)]
当我直接检查内容数据库时,我发现 Sites.FullUrl 始终为空,尽管我确实有多个网站集和网站(webs.FullUrl 不为空)。
我检查了我在虚拟机上安装的 2 个 SharePoint 2010,它们对于 Sites.FullURL 都是空的。有人可以确认 Sites.FullUrl 不应该为空吗?是因为 sharepoint 2010 吗?
使用Powershell,我可以获得我想要的所有信息。所以,我想我也应该能够直接从数据库中获取所有信息。这是对的吗?
建议不要查询内容数据库。你应该把它当作一个黑匣子,正如另一个问题所解释的那样。
如果您需要某种方式从外部应用程序动态检索SPSite
的 url,您可以将 url 存储在列表中,然后使用列表 Web 服务调用检索它。
如果要查找网站集的URL,则可以使用Sites.RootWebId加入Webs,并使用Webs.FullUrl。
例如:
select SiteID=Sites.ID
, RootWebId=Sites.RootWebId
, RootWebURL = Webs.FullUrl
from Sites
inner join Webs on Sites.RootWebId = Webs.Id