none
Insertion de lignes dans MSSMS RRS feed

  • Question

  • bonjour je voudrais à l'aide d'un script SQL, insérer des lignes dans une table , mais qu'elle ne s'insere pas à la fin de la table mais entre deux lignes au milieu de la table par exemple.
    mercredi 30 mai 2012 09:32

Réponses

  • Bonjour,

    Comme indiqué dans un autre forum, la notion de tri n'a de sens qu'en considérant une expression de tri en particulier, donc il faut juste que la ligne contienne les données pour que ce tri particulier donne l'ordre que vous souhaitez (éventuellement une colonne "Ordre" si on veut un tri arbitraire indépendamment de toute autre donnée).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 30 mai 2012 11:01

Toutes les réponses

  • Bonjour,

    Comme indiqué dans un autre forum, la notion de tri n'a de sens qu'en considérant une expression de tri en particulier, donc il faut juste que la ligne contienne les données pour que ce tri particulier donne l'ordre que vous souhaitez (éventuellement une colonne "Ordre" si on veut un tri arbitraire indépendamment de toute autre donnée).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 30 mai 2012 11:01
  • bonjour, 

    Existe t'il une façon plus direct , avec un script, par exemple ou une procédure stockée , ou encore un ETL ou un job?


    • Modifié yossaf mardi 5 juin 2012 14:28
    mardi 5 juin 2012 14:28
  • De faire quoi ? Le problème est donc que sans indication explicite de tri (clause ORDER BY) les données sont retournées probablement dans l'ordre physique de leur stockage (donc souvent index clustered) mais l'idée est que c'est un détail et que si l'on ne demande pas explicitement un tri, la base est libre de retourner les données dans l'ordre qu'elle veut (voire pas le même ordre deux fois de suite).

    A ma connaissance la SEULE façon d'avoir la GARANTIE que les données sont triées est d'utiliser une clause ORDER BY. Pour que les nouvelles lignes soient dans l'ordre voulu, il faut donc que les colonnes utilisées dans cette clause ORDER BY aient les valeurs convenables :

    CREATE TABLE t(Data VARCHAR(10) CONSTRAINT pk PRIMARY KEY)
    INSERT INTO t VALUES('A')
    INSERT INTO t VALUES('C')
    INSERT INTO t VALUES('B')
    SELECT * FROM t ORDER BY Data
    Expliquer peut-être le problème d'origine ? Si l'ordre a une importance (n° de ligne de commande ?), il faudrait sans doute faire apparaitre cette notion explicitement dans la base ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mardi 5 juin 2012 15:16
  • OUI l'ordre à de l'importance, car j'ai configuré un job qui passe dans cette table ou chaque ligne = un ETL , le job fait donc tourner les ETL en commençant par la première ligne de la table et ainsi de suite.

    Il m'arrive , donc , de rajouter un ETL , et souvent cet ETL doit s’exécuter avant et après un autre ETL, et le problème quand tu rajoute l'ETL dans la table il le met à la fin.

    donc il s'execute en dernier.

    Pour l'instant j'enregistre le script de création de la table , je modifie le script en insérant la ligne la ou je veux , je delete la table et je la recrée.

    ca prend du temps et c'est chiant. y a t'il une autre solution que celle citée?

    mercredi 6 juin 2012 09:00
  • Si je reprends dans le sens contraire, comment est-ce que VOUS vous savez que la ligne que vous venez d'insérer doit être exécutée avant une ligne déjà existante ? Si vous ne pouvez pas le voir en regardant vos données, alors il manque une colonne dans votre table sur laquelle il faudra donc faire un ORDER BY quand vous sélectionnez les jobs de la table...

    Je m'explique sans doute mal mais pour l'instant vous semblez vouloir avoir une notion de "1ère ligne", "2ème ligne", "3ème ligne" mais sans avoir à définir aucun ordre de tri. Si je vous donne en vrac des couples (Prénom,Nom) comme  (Alain,Bernard), (François,Robert) et (Jean,Henry) et que je vous demande quel sera la "première ligne", je ne vois pas comment vous pourrez me répondre si je ne vous dis pas si je veux la réponse pour un tri sur le prénom ou sur le nom...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 6 juin 2012 11:38