2016-06-08 9 views
0

Wenn ich versuche, den BefehlEs können nicht alle Etiketten innen TFS bekommen

TF labels /owner:* 

ich den Fehler

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

, eine Datenbank Korruption Ich gehe davon aus, dass es ähnlich An diesem Punkt zu laufen zu dem, was ich in der Vergangenheit erlebt habe - “TF14045: The identity <guid> is not a Recognized identity” with TFS 2012 update 4 after upgrade from 2010

Ich kann Etiketten aus anderen Sammlungen erhalten und Etiketten von bestimmten Benutzern erhalten.

Ich gehe ein Vorfall Ticket öffnen, aber ich wollte hier überprüfen, ob jemand eine mögliche Lösung hatte.

Prost

+0

Meinten Sie einfach nur die 'TF Etiketten/Besitzer angetroffen: *' Fehler –

+0

problemCould tritt Sie Quellcodeverwaltung zu sehen führen durch das Fenster Explorer den Unterordner der rechten Maustaste, für die Sie die entsprechenden Etiketten auflisten möchten und wählen Sie View History aus dem Kontextmenü und wählen Sie dann Labels? –

+1

Hey Patrick, ja das Problem tritt nur auf, wenn ich "tf labels/owner: *" führe Wenn ich meinen Namen als Besitzer setze, sehe ich alle meine Labels, wenn ich die Sammlung ändere und/Besitzer: * alles funktioniert. Wir hatten zuvor Probleme mit schlechten Benutzern in der Datenbank. Ich habe ein Vorfallticket bei Microsoft hinterlegt und melde mich mit einer Antwort zurück, wenn alles behoben ist. – Lareau

Antwort

0

so war die Frage am Ende, dass TFS Etiketten zu Benutzerkonten zugeordnet wurden, die nicht mehr existieren würde.

Der Microsoft-Rep erstellte das folgende Skript unten. Er ordnet die beschädigten Labels einem vorhandenen Konto zu.

/* 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 

Nach diesem Skript konnte ich den Befehl Etiketten ausführen. Aber es gab immer noch ein paar schlechte Accounts - TF14132: Identität nicht gefunden

Mit den Namen der Etiketten konnte ich die Identität des schlechten Benutzers erhalten und sie mit einem guten Benutzer aktualisieren.

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 
Verwandte Themen