为什么SharePoint内容数据库中的Sites.FullUrl为空?哪里可以找到网站集url?

时间:2012-10-10 00:30:02

标签: sql-server sharepoint sharepoint-2010

我正在开发一个sharepoint项目。它需要使用SQL查询来获取有关网站集和web的一些信息。我正在使用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始终为null,尽管我有多个网站集和网站(webs.FullUrl不为空)。

我检查了我在VM上安装的2个Sharepoint 2010,它们对于Sites.FullUrl都是空的。有人可以确认Sites.FullUrl不应该是空白的吗?是因为sharepoint 2010?

使用PowerShell,我可以获得我想要的所有信息。所以,我想我应该能够直接从数据库中获取所有信息。这是对的吗?

2 个答案:

答案 0 :(得分:1)

不建议您查询内容数据库。你应该把它当作一个黑盒子,as explained in this other question

如果您需要某种方法从外部应用程序动态检索SPSite的网址,您可以将网址存储在列表中,然后使用列表网络服务调用来检索它。

答案 1 :(得分:1)

如果您要查找网站集的URL,可以使用Sites.RootWebId与Web连接,并使用Webs.FullUrl。

例如:

select SiteID=Sites.ID
    , RootWebId=Sites.RootWebId
    , RootWebURL = Webs.FullUrl
from Sites 
    inner join Webs on Sites.RootWebId = Webs.Id