如何在TFS 2015中生成每个项目的最新签到列表?

时间:2016-05-26 10:57:25

标签: sql tfs tfs2015

我正在尝试生成正在积极开展工作的TFS 2015中的项目列表(因此我知道哪些团队会通知计划的升级停机时间)。有近70个项目,所以点击每个项目的历史有点过于劳动密集。

我见过旧版TFS的示例,它们在tbl_identity上查询了tbl_ChangeSet和一个JOIN,但是我的TFS 2015数据库中缺少该表,我无法找到替代品。

所以我的问题是:如何在TFS 2015数据库的tbl_ChangeSet中加入OwnerId?

与我的目标相匹配的完整查询的示例当然也是受欢迎的,任何替代方法都可以使用(PowerShell脚本可能吗?)!

1 个答案:

答案 0 :(得分:0)

我找到了tbl_Identity表!

在我们公司,我们有两个TFS集合 - 我们称之为FooBar和FooBar-DSG - 带有两个相应的数据库:Tfs_FooBar和Tfs_FooBar-DSG。

[tbl_Identity]表位于名为Tfs_Foobar_Configuration的数据库中。

要在[tbl_Identity]表中查找记录,您必须在[tbl_IdentityMap]。[localId]上加入[tbl_ChangeSet]。[OwnerId],并使用[tbl_IdentityMap]。[masterId]加入[tbl_Identity] .Id

以下是我最终做的事情 - 没有生成团队列表,而是生成用户列表及其电子邮件地址和最新登记日期。我可以使用此列表将我的TFS停机通知电子邮件发送到。

以下是我的疑问:

SELECT DISTINCT [OwnerId], I.DisplayName, I.MailAddress,
    (SELECT TOP 1 CreationDate FROM [Tfs_FooBar-DSG].[dbo].tbl_ChangeSet C2 
     WHERE C2.OwnerId = C1.OwnerId ORDER BY CreationDate DESC) LatestDate
FROM [Tfs_FooBar-DSG].[dbo].[tbl_ChangeSet] C1
LEFT OUTER JOIN [Tfs_FooBar-DSG].[dbo].[tbl_IdentityMap] IM ON IM.[localId] = C1.OwnerId
LEFT OUTER JOIN Tfs_FooBar_Configuration.[dbo].[tbl_Identity] I ON IM.[masterId] = I.Id
ORDER By LatestDate DESC, [OwnerId], DisplayName, MailAddress

SELECT DISTINCT [OwnerId], I.DisplayName, I.MailAddress,
    (SELECT TOP 1 CreationDate FROM [Tfs_FooBar].[dbo].tbl_ChangeSet C2 
     WHERE C2.OwnerId = C1.OwnerId ORDER BY CreationDate DESC) LatestDate
FROM [Tfs_FooBar].[dbo].[tbl_ChangeSet] C1
LEFT OUTER JOIN [Tfs_FooBar].[dbo].[tbl_IdentityMap] IM ON IM.[localId] = C1.OwnerId
LEFT OUTER JOIN Tfs_FooBar_Configuration.[dbo].[tbl_Identity] I ON IM.[masterId] = I.Id
ORDER By LatestDate DESC, [OwnerId], DisplayName, MailAddress

更新:Daniel Mann在下面的评论中警告说“你不应该直接针对TFS运营商店编写查询。它不受支持且有潜在危险”。如果您可以使用不受支持的功能,以及SELECT查询的危险程度,请自行决定。