TFS 2017数据库中查询工作项标签的表/视图及方法咨询
查询TFS数据库中工作项标签的方法
首先,你提到的WorkItemsAre应该是旧版本TFS里的视图,在新版本(比如TFS 2018+或者Azure DevOps Server)中,标签相关的数据存储在几个核心表/视图里,我给你梳理一下具体的查询方法:
核心关联对象说明
- WorkItemTags:存储所有工作项标签的基础信息,包含
TagSK(标签唯一键)、TagName(标签名称)、ProjectSK(关联项目键)等字段。 - WorkItemTagLinks:这是工作项与标签的关联表,通过
WorkItemSK和TagSK建立多对多关系,用来把工作项和对应的标签绑定起来。 - WorkItemsLatest:如果需要获取工作项的最新数据,这个视图(或者
WorkItems表)是核心数据源,包含你提到的WorkItemSK、System_Id、ProjectSK、CollectionGUID等字段。
示例SQL查询语句
下面是一个直接可用的查询,能把工作项的基础信息和对应的标签关联起来:
SELECT wi.System_Id AS WorkItemID, wi.System_Title AS Title, t.TagName AS WorkItemTag FROM WorkItemsLatest wi LEFT JOIN WorkItemTagLinks wtl ON wi.WorkItemSK = wtl.WorkItemSK LEFT JOIN WorkItemTags t ON wtl.TagSK = t.TagSK WHERE wi.ProjectSK = [你的项目SK] -- 替换成实际的ProjectSK值 AND wi.CollectionGUID = '你的集合GUID' -- 替换成实际的CollectionGUID字符串 ORDER BY wi.System_Id, t.TagName
如果需要把同一个工作项的多个标签合并成一行(用逗号分隔),可以用SQL Server 2017及以上支持的STRING_AGG函数:
SELECT wi.System_Id AS WorkItemID, wi.System_Title AS Title, STRING_AGG(t.TagName, ', ') AS WorkItemTags FROM WorkItemsLatest wi LEFT JOIN WorkItemTagLinks wtl ON wi.WorkItemSK = wtl.WorkItemSK LEFT JOIN WorkItemTags t ON wtl.TagSK = t.TagSK WHERE wi.ProjectSK = [你的项目SK] AND wi.CollectionGUID = '你的集合GUID' GROUP BY wi.System_Id, wi.System_Title ORDER BY wi.System_Id
额外提醒
- 虽然你清楚官方不建议直接查询TFS数据库,但还是要注意:不同TFS/Azure DevOps Server版本的表结构可能有细微差异,升级后要验证查询是否仍能正常运行。
- 尽量避开业务高峰期执行这类查询,防止影响TFS服务的性能。
- 如果你的TFS版本比较老旧(比如2015及以前),可能需要结合
WorkItemsAre视图、tbl_Tag和tbl_WorkItemTagging表来关联,但这类旧表的结构稳定性较差。
内容的提问来源于stack exchange,提问作者Bill Greer
相关产品推荐
相关产品推荐

