很多這些查詢不再相關的TFS中的新情況。其中一個重要原因是用戶身份(tbl_Identity)已被移動。 Tfs_DefaultCollection是存儲與給定集合有關的所有信息的數據庫,但TFS可以託管多個集合,管理員可以在設置TFS時更改默認集合的名稱。
因此,所有的用戶身份已被移動到Tfs_Configuration數據庫;
select * from [tfs_Configuration].dbo.tbl_Identity
獲得從集合DB訪問帳戶名稱(帳戶名或顯示名稱)的描述部分是由從[tfs_DefaultCollection] .dbo.tbl_IdentityMap
select *
from [tfs_Configuration].dbo.tbl_Identity I
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM
ON I.Id = IM.MasterID
加入有了這些信息來實現,我們現在可以生成以下查詢來顯示提交給TFS的最後100個ChangeSets以及提交者的名稱。
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
看着這些數據,我們可以看到ID的很多,小島嶼發展中國家,查找等。我們不會在此數據看到的是關於承諾或有關科提交文件的任何信息被做了。此信息來自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
[tfs_DefaultCollection] .dbo.tbl_Version有幾列興趣點,即; ParentPath,ChildItem & FullPath。這裏缺少的是關於提交的分支的任何有用信息。分支信息嵌入在兩個可用路徑字段中的任何一箇中;
$\da3da7cf"80b5"4385"b3dc"ebb3088f3c01\Features\Inpatient\Source\Yadda\Yadda\Yadda\
這引發了下一個問題,分支機構信息存儲在TFS中?感謝上面的StackOverflowUsers回答,這些信息在[tfs_DefaultCollection] .dbo.TreeNodes表中找到;
select * from [tfs_DefaultCollection].dbo.[TreeNodes] where parentID=0 and fDeleted=0
列CssNodeID是我們正在尋找的是有意義出FULLPATH
CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01
不過的ID,這給我們提出了我們對TFS數據庫的下一個挑戰。很多信息被編碼和/或嵌入,所以我們需要操縱一些東西來獲得我們所追求的東西。
在此實例中,包含分支信息的[tfs_DefaultCollection] .dbo.tbl_Version.ParentPath或[tfs_DefaultCollection] .dbo.tbl_Version.FullPath值部分。
這醜陋的小老爹在這裏提取ParentPath字段值的ID部分,並取代所有的雙引號用連字符這給我們,我們可以用它來查詢[Tfs_DefaultCollection] .dbo.TreeNodes
SUBSTRING(
REPLACE(v.ParentPath, '$\', ''),
CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')),
(LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')))
)
ID值
將所有這些放在一起追求一個查詢以獲取最後[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
請注意,我包括所有的領導到最終的查詢提供有關地方的利益表所在的上下文查詢數據庫預選賽。
這個怎麼樣。在TFS服務器上運行Profiler時,通過TFS SDK獲取結果集。查看生成的SQL語句。感謝掃羅 – 2010-01-08 17:41:31