无法获得TFS内的所有标签

时间:2016-06-08 17:51:18

标签: tfs corruption

当我尝试运行命令

TF labels /owner:*

我收到错误

Data is Null.  This method or property cannot be called on Null Values.

此时,我假设它的数据库损坏类似于我过去所经历的那样 - “TF14045: The identity <guid> is not a Recognized identity” with TFS 2012 update 4 after upgrade from 2010

我可以从其他集合中获取标签并获取特定用户的标签。

我打开了一张事故罚单,但我想在这里查看是否有人有潜在的解决方案。

干杯

1 个答案:

答案 0 :(得分:0)

所以问题最终是TFS标签与不再存在的用户帐户相关联。

microsoft rep在下面创建了以下脚本。它会将错误标签分配给现有帐户。

/* Script to reassign TFVC artifact ownership to an existing identity
 * The 16 was selected from the healthy identities as 
 * determined by this script 
   SELECT  *
   FROM    tbl_VCIdentityMap vcim
   LEFT JOIN tbl_Identity i
   ON      i.PartitionId = vcim.PartitionId
           AND i.Id = vcim.TeamFoundationId
   WHERE   i.PartitionId IS NOT NULL
   ORDER BY IdentityId
 */

DECLARE @ownerId INT = 844

-- tbl_Labels
UPDATE  l
SET     l.OwnerId = @ownerId
FROM    tbl_Label l
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = l.PartitionId
        AND vcim.IdentityId = l.OwnerId
WHERE   l.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Workspace
UPDATE  w
SET     w.OwnerId = @ownerId
FROM    tbl_Workspace w
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = w.PartitionId
        AND vcim.IdentityId = w.OwnerId
WHERE   w.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Branch
UPDATE  b
SET     b.OwnerId = @ownerId
FROM    tbl_Branch b
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = b.PartitionId
        AND vcim.IdentityId = b.OwnerId
WHERE   b.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Changeset OwnerId
UPDATE  c
SET     c.OwnerId = @ownerId
FROM    tbl_Changeset c
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = c.PartitionId
        AND vcim.IdentityId = c.OwnerId
WHERE   c.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Changeset CommitterId
UPDATE  c
SET     c.CommitterId = @ownerId
FROM    tbl_Changeset c
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = c.PartitionId
        AND vcim.IdentityId = c.CommitterId
WHERE   c.PartitionId = 1
        AND vcim.IdentityId IS NULL

在这个脚本之后,我能够运行labels命令。但仍有一些不好的账户 - TF14132:身份未找到

通过标签的名称,我能够获得不良用户的身份并通过优秀用户更新。

select * from tbl_Label where LabelName like '%BadLabelIdentityName%'

DECLARE @ownerId INT = GoodIdentityNumber
UPDATE  l
SET     l.OwnerId = @ownerId
FROM    tbl_Label l
where l.OwnerId = BadIdentityNumber