IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Permuter 2 lignes dans une arborescence HierarchyID


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 54
    Par défaut Permuter 2 lignes dans une arborescence HierarchyID
    Bonjour,

    Je cherche à mettre de l'ordre dans une structure HierarchyID, et pour cela, je me base sur la liste des enregistrements, trié sur la colonne HierarchyID de ma table source. Jusque là, ça va.

    Ensuite, je propose à l'utilisateur de réordonner les enregistrements, et entre autres, de permuter 2 lignes (entre la ligne N et la ligne N-1).
    Pour cela, je récupère l'OrgNode de la ligne N-2, afin d'affecter l'orgNode de la ligne N la valeur :
    Noeud N.GetAncestor(1).GetDescendant(/Noeud N-2/,/Nœud N-1/)

    Le problème est que les nœud descendants du nœud N ne suivent pas. La fonction GetParentedValue n'est pas applicable car finalement je ne change pas de nœud.

    Quelqu'un a-t-il la solution pour "actualiser" tous les nœuds fils ?

    Merci,

    TALERE

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Cela fait partie des nombreuses limitations de ce type "hierarchyId" qui s'avère très contre performant en pratique... (pas de parallélisme de la requête si le HierarchyId est utilisé, activation de la machine SQL CLR, qui bouffe le cache....) et de toutes façons, certaines requêtes restent récursives...

    Le seul moyen est à mon sens de passer par une étape intermédiaire de recollement, soit par une CTE, soit par une table temporaire ou une variable, qui va "geler" la descendance et la remettre à l'endroit. Et faire un UPDATE avec CASE dans le SET.

    Sinon, reconcevez votre base en utilisant la solution intervallaire de modélisation des arborescences... Cela vous évitera toutes requêtes récursives !

    A lire sur le sujet : http://sqlpro.developpez.com/cours/arborescence/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Comment griser une ligne dans une TListBox ?
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2004, 09h15
  2. N° de ligne dans une table triée ?
    Par andremarco dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/06/2004, 17h19
  3. Selectionner ligne dans une ClistCtrl
    Par fr66 dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2004, 14h58
  4. Suppression d'item dans une arborescence
    Par jonzuzu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 17h45
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo