J'ai des données de parent-enfant dans Excel qui est chargé dans un système tiers exécutant le serveur MS SQL. Les données représentent un graphique acyclique dirigé (espérons-le). 3ème partie signifie que je n'ai pas une main complètement libre dans le schéma. Les données excel sont une concaténation d'autres fichiers et la possibilité existe que dans les références croisées entre les différents fichiers quelqu'un ait provoqué une boucle - ie X est un enfant de Y (X-> Y) alors ailleurs (Y-> A- > BX). Je peux écrire vb, vba etc sur Excel ou sur le serveur SQL db. Le fichier Excel compte près de 30 000 lignes donc je m'inquiète d'une explosion combinatoire alors que les données vont augmenter. Donc, certaines des techniques comme la création d'une table avec tous les chemins peuvent être assez compliquées. Je pense simplement à écrire un programme qui, pour chaque racine, effectue une traversée d'arbre à chaque feuille et si la profondeur devient supérieure à une valeur nominale, elle le signale.
De meilleures suggestions ou des indications sur la discussion précédente sont les bienvenues.SQL - détection des boucles dans les relations parents-enfants
Répondre
Vous pouvez utiliser un CTE récursive pour détecter les boucles:
with prev as (
select RowId, 1 AS GenerationsRemoved
from YourTable
union all
select RowId, prev.GenerationsRemoved + 1
from prev
inner join YourTable on prev.RowId = ParentRowId
and prev.GenerationsRemoved < 55
)
select *
from prev
where GenerationsRemoved > 50
Cela ne vous oblige à spécifier un niveau maximum de récursivité: dans ce cas, le CTE court à 55, et il sélectionne des lignes comme erronées avec plus de 50 enfants.
C'est à peu près ce que j'ai fait aussi. Ça marche bien. –
Je n'avais jamais entendu parler de CTE car mon expérience DB est en grande partie zSeries DB/2. Merci pour le pointeur vers eux. Je pense que j'ai maintenant la réponse à un certain nombre d'autres questions. – Wudang
Et trouvé un tutoriel décent ici http://msdn.microsoft.com/en-us/library/ms186243.aspx Merci les gars – Wudang
- 1. Utilisation des relations dans NoSQL vs SQL
- 2. Erreurs de paramètre SQL C# dans les boucles
- 3. Définition des relations SQL pour les requêtes LINQ
- 4. Eviter les boucles dans R
- 5. Continuer dans les boucles imbriquées
- 6. Pour les boucles dans Matlab
- 7. Pointeurs dans les boucles For
- 8. Créer des relations entre les tables
- 9. SQL Server 2005: détection de cycles dans des données hiérarchiques
- 10. Débogage des boucles
- 11. LINQ to SQL - Insertion des entités ayant des relations
- 12. programmation Scheme trouver des éléments dans les boucles imbriquées
- 13. Relations profondes dans les rails
- 14. Jquery - $ (this) dans les boucles imbriquées
- 15. Comment tuer des boucles dans Xcode?
- 16. SQL boucles procédure stockée question du serveur
- 17. Relations de colonne SQL Server
- 18. SQL Server - Noob Relations Question
- 19. Genshi: imbriqué pour les boucles
- 20. éviter les boucles xml dans jstl
- 21. ++ i ou i ++ dans les boucles?
- 22. Dans les boucles, est-ce important?
- 23. Remplacer les boucles dans la fonction R
- 24. Débutant, tandis que les boucles
- 25. Comment optimiser les boucles MATLAB?
- 26. Question sur les boucles complexes
- 27. comment trouver des relations entre les tables
- 28. Comment créer des relations dans MySQL
- 29. Problèmes avec les boucles imbriquées ...
- 30. OpenMP pour les boucles imbriquées?
Que souhaitez-vous faire lorsqu'une boucle est détectée? – Fosco
Votre plafond arbitraire de «supérieur au niveau X = problème» peut être inexact si vous ne connaissez pas ou ne pouvez pas déterminer la profondeur maximale valide. Cette information est-elle disponible? –