我正在尝试生成正在积极开展工作的TFS 2015中的项目列表(因此我知道哪些团队会通知计划的升级停机时间)。有近70个项目,所以点击每个项目的历史有点过于劳动密集。
我见过旧版TFS的示例,它们在tbl_identity上查询了tbl_ChangeSet和一个JOIN,但是我的TFS 2015数据库中缺少该表,我无法找到替代品。
所以我的问题是:如何在TFS 2015数据库的tbl_ChangeSet中加入OwnerId?
与我的目标相匹配的完整查询的示例当然也是受欢迎的,任何替代方法都可以使用(PowerShell脚本可能吗?)!
答案 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查询的危险程度,请自行决定。