sta*_*ser 7 sql sql-server tfs
有没有办法查询TFS数据库以获取最后10个签到详细信息
输出应该是这样的
File name | Comment | Changed By | Date
----------------------------------------------------------------------------
Test.cs Added new functionality username 01/08/2010
Run Code Online (Sandbox Code Playgroud)
我知道可以使用TFS SDK获得上述结果集.但我想知道是否有办法查询TFS数据库以获取上述数据.
谢谢
如果我正确地理解了你的问题,这将使你在SQL中的大部分方式:
SELECT TOP 10
V.ChildItem AS [File name],
CS.Comment,
I.DisplayName AS [Changed By],
CS.CreationDate AS [Date]
FROM tbl_Changeset CS
INNER JOIN tbl_Identity I ON I.IdentityID = CS.OwnerID
INNER JOIN tbl_Version V ON V.VersionFrom = CS.ChangesetID
ORDER BY CS.CreationDate DESC
Run Code Online (Sandbox Code Playgroud)
当我在我的TFS实例上测试它时,文件名中有一些转义字符出现(如下划线字符变为">").除此之外,这应该对你很好.
许多这些查询不再与较新的TFS实例相关.其中一个重要原因是用户身份(tbl_Identity)已被移动.Tfs_DefaultCollection是存储与给定Collection相关的所有信息的DB,但TFS可以托管多个集合,管理员可以在设置TFS时更改默认Collection的名称.
因此,所有用户身份都已移至Tfs_Configuration数据库;
select * from [tfs_Configuration].dbo.tbl_Identity
Run Code Online (Sandbox Code Playgroud)
通过从[tfs_DefaultCollection] .dbo.tbl_IdentityMap加入来获取从集合数据库访问帐户名称(AccountName或DisplayName)的描述性部分的过程.
select *
from [tfs_Configuration].dbo.tbl_Identity I
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON I.Id = IM.MasterID
Run Code Online (Sandbox Code Playgroud)
有了这些信息,我们现在可以生成以下查询,以显示提交给TFS的最后100个ChangeSet以及提交者的名称.
select top 100 *
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN tfs_configuration.dbo.tbl_Identity u
ON IM.MasterID = u.Id
Order by C.ChangeSetID DESC
Run Code Online (Sandbox Code Playgroud)
查看此数据,我们可以看到很多ID,Sids,查找等.我们在此数据中看不到的是有关已提交的文件或有关提交分支的信息的任何信息.此信息来自tbl_Version表.
select top 100 *
from [tfs_DefaultCollection].dbo.tbl_changeset as c
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [tfs_configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN [tfs_DefaultCollection].dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
Order by C.ChangeSetID DESC
Run Code Online (Sandbox Code Playgroud)
[tfs_DefaultCollection] .dbo.tbl_Version有几个感兴趣的列,即; ParentPath,ChildItem和FullPath.这里缺少的是有关提交提交的分支的任何有用信息.分支信息嵌入在2个可用路径字段中的任何一个中;
$\da3da7cf"80b5"4385"b3dc"ebb3088f3c01\Features\Inpatient\Source\Yadda\Yadda\Yadda\
Run Code Online (Sandbox Code Playgroud)
这就引出了下一个问题,分支信息存储在TFS中?感谢上面的StackOverflowUsers回答,这个信息可以在[tfs_DefaultCollection] .dbo.TreeNodes表中找到;
select * from [tfs_DefaultCollection].dbo.[TreeNodes] where parentID=0 and fDeleted=0
Run Code Online (Sandbox Code Playgroud)
Column CssNodeID是我们想要从FullPath中理解的ID
CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01
Run Code Online (Sandbox Code Playgroud)
但是,这为我们提供了有关TFS数据库的下一个挑战.许多信息都是编码和/或嵌入的,所以我们需要操作一些东西才能得到我们所追求的东西.
在此实例中,包含分支信息的[tfs_DefaultCollection] .dbo.tbl_Version.ParentPath或[tfs_DefaultCollection] .dbo.tbl_Version.FullPath值的一部分.
这个丑陋的小伙伴就在这里提取ParentPath字段值的ID部分,并用连字符替换所有双引号,它给我们一个Id值,我们可以用来查询[Tfs_DefaultCollection] .dbo.TreeNodes
SUBSTRING(
REPLACE( v.ParentPath, '$\', ''),
CHARINDEX( '\', REPLACE( v.ParentPath, '$\', '') ),
( LEN( v.ParentPath ) - CHARINDEX( '\', REPLACE( v.ParentPath, '$\', '') ) )
)
Run Code Online (Sandbox Code Playgroud)
将所有这些放在一起以追求查询以获取最后[X]签入详细信息的结果如下;
select top 10
c.CreationDate,
c.Comment,
u.DisplayName as CommittingUser,
TN.Name as BranchName,
SUBSTRING(
REPLACE( v.ParentPath, '$\', ''),
CHARINDEX( '\', REPLACE( v.ParentPath, '$\', '') ),
( LEN( v.ParentPath ) - CHARINDEX( '\', REPLACE( v.ParentPath, '$\', '') ) )
) as ChangedFile
from tbl_changeset as c
JOIN tbl_IdentityMap IM
ON C.OwnerID = IM.localId
JOIN [Tfs_Configuration].dbo.tbl_Identity u
ON IM.MasterID = u.Id
JOIN dbo.tbl_Version as v
ON v.Versionfrom = c.ChangeSetId
LEFT JOIN dbo.TreeNodes TN with(nolock)
ON TN.CssNodeId = REPLACE(
SUBSTRING(
REPLACE( v.ParentPath, '$\', ''),
0,
CHARINDEX( '\', REPLACE( v.ParentPath, '$\', '') )
),
'"', '-'
)
AND parentID=0
AND fDeleted=0
Order by c.CreationDate desc
Run Code Online (Sandbox Code Playgroud)
请注意,我为所有查询包含了数据库限定符,这些查询导致最终查询,以提供感兴趣的表所在位置的上下文.
作为解决方法,下面的查询怎么样..但我认为它返回了错误的评论..不知道为什么。
SELECT top 10
C.ChangeSetId,
V.FullPath,
V.ParentPath,
REPLACE(V.ChildItem,'\','') as [FileName],
C.CreationDate,
I.DisplayName,
C.Comment
FROM tbl_Version(nolock) V
INNER JOIN tbl_File (nolock) F ON V.ItemId = F.ItemId
INNER JOIN tbl_Changeset (nolock) C ON V.VersionTo = C.ChangeSetId
INNER JOIN tbl_Identity (nolock) I ON C.CommitterId = I.IdentityId
where v.ParentPath like '$\' + (select name from [TfsWorkItemTracking].[dbo].[treenodes] where parentid=0 and fdeleted=0 and id=524) + '\%'
order by C.CreationDate desc
Run Code Online (Sandbox Code Playgroud)
感谢 mark.crockett 发布上述查询@ http://social.msdn.microsoft.com/Forums/en-US/tfsreporting/thread/32d2c27e-825b-43bb-b156-36048a3e70cb/
归档时间: |
|
查看次数: |
11048 次 |
最近记录: |