You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SharePoint 2013:如何从SharePoint数据库获取SPSite.Url属性

直接操作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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:02:51