Question

I ai une table typique des données hiérarchiques dans id, forme parentId.

CREATE TABLE Hierarchy (Id int, ParentId int NULL, Name varchar(128));
INSERT INTO Hierarchy VALUES (1, NULL, '1');
INSERT INTO Hierarchy VALUES (2, NULL, '2');
INSERT INTO Hierarchy VALUES (3, NULL, '3');
INSERT INTO Hierarchy VALUES (4, 1, '1.1');
INSERT INTO Hierarchy VALUES (5, 1, '1.2');
INSERT INTO Hierarchy VALUES (6, 4, '1.1.1');

Je dois détecter les cycles comme ci-dessous dans les données existantes.

Id  ParentId  Name
27  8         'foo'
8   19        'bar'
19  27        'busted'

Les Ids sont d'une autre table donc je ne peux pas utiliser la commande de la Ids dans le cadre de la solution. Il y a environ 1/2 million de lignes. Les données sont un grand nombre d'arbres indépendants de la hauteur 1-5. Le but est de nettoyer les données pour éliminer les cycles puis ajouter un élément déclencheur à la table pour éviter les cycles dans l'avenir.

Je sais que pour la détection de cycle. Il me semble que cela devrait être un problème commun. Alors, je me demandais s'il y avait un moyen pratique dans la boîte de SQL Server » pour y arriver avec un minimum de code.

Était-ce utile?

La solution

Si vous avez Sql Server 2005, vous pouvez utiliser la clause WITH pour faire une requête récursive contre votre table. Cela vous permettra de réduire la logique, comme cela semble être votre objectif principal.

http://blogs.msdn.com /craigfr/archive/2007/10/25/recursive-ctes.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top