2010-01-08 27 views
5

有沒有一種方法來查詢TFS數據庫來獲取最後10登記入住信息查詢TFS數據庫,以獲取最後10登記入住信息

輸出應該是這樣的

File name |  Comment    | Changed By  |  Date 
---------------------------------------------------------------------------- 
Test.cs   Added new functionality  username   01/08/2010 

我意識到使用TFS SDK可以獲得上述結果集。但我想知道如果 有一種方法來查詢TFS數據庫來獲取上述數據。

感謝

+0

這個怎麼樣。在TFS服務器上運行Profiler時,通過TFS SDK獲取結果集。查看生成的SQL語句。感謝掃羅 – 2010-01-08 17:41:31

回答

1

作爲一個解決方法如何下面的查詢..但我認爲它是返回我錯誤的評論..不知道爲什麼。

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 

感謝mark.crockett張貼上面的查詢@http://social.msdn.microsoft.com/Forums/en-US/tfsreporting/thread/32d2c27e-825b-43bb-b156-36048a3e70cb/

8

如果我正確理解你的問題,這將讓你最的方式存在於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 

有一些在出現了,而我的文件名轉義字符在我的TFS實例上測試這個(像下劃線字符變成「>」)。除此之外,這應該爲你服務。

+0

。這對我有用。你可以請。讓我知道如果需要修改上述內容以給出特定項目的結果,那麼可以如何完成? – stackoverflowuser 2010-01-08 18:35:30

+0

我想你改變了查詢。新的查詢沒有給出預期的結果。 – stackoverflowuser 2010-01-08 18:39:18

+0

我恢復爲原始查詢。對困惑感到抱歉。至於爲特定項目做這項工作,我不確定這是否可以完成。默認情況下,TFS版本控制不會明確跟蹤團隊項目的變更集。我能想到的唯一方法就是完成這個任務,這取決於用戶將他們的所有變更集與特定團隊項目下的特定工作項目相關聯。 – 2010-01-08 19:07:41

0

如果您有權訪問承載TFS數據庫的SQL服務器,那麼您必須查看的數據庫是TFSWarehouse,那麼您可以查找表格Work Item,tbl_Changeset,tbl_Identity,tbl_Version等,從中可以獲取某些信息。

Thnks。

3

很多這些查詢不再相關的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 

請注意,我包括所有的領導到最終的查詢提供有關地方的利益表所在的上下文查詢數據庫預選賽。