tfs 方法访问数据库 源代码_查询TFS数据库以获取最后10个签入详细信息

很多这些查询不再与较新的TFS实例相关。其中一个重要原因是用户身份(tbl_Identity)已被移动。 Tfs_DefaultCollection是存储与给定Collection相关的所有信息的DB,但TFS可以托管多个集合,管理员可以在设置TFS时更改默认Collection的名称。

因此,所有用户身份都已移至Tfs_Configuration数据库;

select * from [tfs_Configuration].dbo.tbl_Identity通过从[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有了这些信息,我们现在可以生成以下查询,以显示提交给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查看这些数据,我们可以看到很多ID,Sids,Lookup等。我们在此数据中看不到的是有关已提交的文件或有关提交分支的信息的任何信息。此信息来自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&完整路径。这里缺少的是有关提交提交的分支的任何有用信息。分支信息嵌入在2个可用路径字段中的任何一个中;

$\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=0Column CssNodeID是我们想要从FullPath中理解的ID

CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01但是,这为我们提供了有关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, '$\', '') ) )

)将所有这些放在一起以寻求查询以获取最后[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请注意,我为所有查询包含了DB限定符,以便提供最终查询以提供感兴趣的表所在位置的上下文。

数据库迭代查询作业 emp(eno, ename, salary, mgr),其中mgr是员工领导,设计约束:要求领导的工资不能低于他的下属平均工资。(注意,这是一个递归查询) 下面是一些样例数据 CREATE TABLE dbo.Employees ( empid INT NOT NULL PRIMARY KEY, mgrid INT NULL REFERENCES dbo.Employees, empname VARCHAR(25) NOT NULL, salary MONEY NOT NULL, CHECK (empid mgrid) ); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(1, NULL, 'David', $10000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(2, 1, 'Eitan', $7000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(3, 1, 'Ina', $7500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(4, 2, 'Seraph', $5000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(5, 2, 'Jiru', $5500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(6, 2, 'Steve', $4500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(7, 3, 'Aaron', $5000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(8, 5, 'Lilach', $3500.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(9, 7, 'Rita', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(10, 5, 'Sean', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(11, 7, 'Gabriel', $3000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(12, 9, 'Emilia' , $2000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(13, 9, 'Michael', $2000.00); INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES(14, 9, 'Didi', $1500.00);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值