SharePoint 2013:如何从SharePoint数据库获取SPSite.Url属性
先啰嗦一句(毕竟必须提):直接操作SharePoint数据库真的是微软明令不支持的,搞不好会搞坏数据、丢官方支持,后续升级也容易出问题——不过你既然说有苦衷非得这么做,那咱们直接说正事。
为啥你只能拿到后半段?
SPSite的完整Url其实是「Web应用的根URL」加上「Site的相对路径」拼出来的。你现在拿到的sites/somename是Sites表的Url字段,只是相对路径;而Web应用的根URL存在WebApplications表的FullUrl字段里,得把这俩拼起来才是完整地址。
具体怎么拿?
系统并没有专门的存储过程直接吐给你完整Url,但有几种方式可以实现:
1. 直接查系统表拼接(最直接)
打开SharePoint的配置数据库(一般叫SharePoint_Config),跑这个查询就能直接拿到完整Url:
SELECT wa.FullUrl + s.Url AS FullSiteUrl, s.SiteId, s.Url AS RelativeSiteUrl, wa.FullUrl AS WebAppRootUrl FROM dbo.Sites s JOIN dbo.WebApplications wa ON s.WebApplicationId = wa.Id -- 要是只查特定Site,加个WHERE条件就行,比如 -- WHERE s.SiteId = '你的Site的GUID'
2. 用系统自带存储过程分步拿
如果你更倾向用存储过程,可以分两步来:
- 先调用
dbo.proc_GetSiteBySiteId,传入你的SiteId,它会返回Site的相对路径Url和对应的WebApplicationId:EXEC dbo.proc_GetSiteBySiteId @SiteId = '你的SiteId' - 再拿刚才得到的
WebApplicationId调用dbo.proc_GetWebApplicationById,就能拿到Web应用的根URLFullUrl:EXEC dbo.proc_GetWebApplicationById @Id = '上面拿到的WebApplicationId' - 最后把这俩字符串拼起来,就是你要的完整SPSite.Url了。
3. 自己整个存储过程(省事)
要是你经常需要查,不如自己写个简单的存储过程,以后调用起来更方便:
CREATE PROCEDURE dbo.proc_GetFullSiteUrl @SiteId UNIQUEIDENTIFIER AS BEGIN SELECT wa.FullUrl + s.Url AS FullSiteUrl FROM dbo.Sites s JOIN dbo.WebApplications wa ON s.WebApplicationId = wa.Id WHERE s.SiteId = @SiteId END
用的时候直接传SiteId就行:
EXEC dbo.proc_GetFullSiteUrl @SiteId = '你的SiteId'
最后再提一嘴:这些操作都得在SharePoint配置数据库里执行,而且得有足够的权限;再次强调,直接操作数据库风险不小,真出问题微软可不认哦。
内容的提问来源于stack exchange,提问作者Amir M
相关产品推荐
相关产品推荐

