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 :

[SQL Server 2005] Curseur : ordre des instructions


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut [SQL Server 2005] Curseur : ordre des instructions
    Bonjour,

    j'ai le problème suivant :
    J'ai un curseur, et dans mon WHILE sur le @@FETCH_STATUS, j'execute une instruction INSERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FETCH CursInstruction INTO @Temp
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
      INSERT INTO ##SCRIPT VALUES (@Temp)
      FETCH NEXT FROM CursInstruction INTO @Temp
    END
    Or je remarque que les Insert ne se font pas dans l'ordre. Quand la variable @Temp (de type VARCHAR(MAX)) contient un volume important, son insertion se fait parfois avec 3 ou 4 occurences de retard.
    Ca me donne donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FETCH met la valeur Instruction1 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction1)
    FETCH met la valeur Instruction2 dans @Temp
    FETCH met la valeur Instruction3 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction3)
    FETCH met la valeur Instruction4 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction2)
    etc...

    Y'a-t-il une solution pour forcer les insert à attendre la fin de l'insert précédent pour s'executer ?

    Merci d'avance !

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Comment tu fais pour afficher ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FETCH met la valeur Instruction1 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction1)
    FETCH met la valeur Instruction2 dans @Temp
    FETCH met la valeur Instruction3 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction3)
    FETCH met la valeur Instruction4 dans @Temp
    INSERT INTO ##SCRIPT VALUES(Instruction2)
    Et c'est quoi ##Script, c'est une table?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Oui, c'est une table (temporaire).
    En fait je n'affiche pas, c'est juste en faisant un select * dans ma table ##SCRIPT (qui ne contient qu'une colonne), mes instructions ne sont pas dans l'ordre. Alors que si je ne m'abuse, le select devrait par défaut renvoyer les lignes ordonnées par date d'insertion dans la table, non ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par nox75 Voir le message
    Oui, c'est une table (temporaire).
    En fait je n'affiche pas, c'est juste en faisant un select * dans ma table ##SCRIPT (qui ne contient qu'une colonne), mes instructions ne sont pas dans l'ordre. Alors que si je ne m'abuse, le select devrait par défaut renvoyer les lignes ordonnées par date d'insertion dans la table, non ?
    C'est faux !! Avec une colonne et sans index cluster tout sera dans le désordre.
    Pour que tes lignes apparaissent dans l'ordre il faut 2 colonnes.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    J'ai ajouté une colonne, le problème reste le même.
    Sinon tant pis j'ajoute une colonne que j'incrémente à chaque insert, et j'order by dessus dans mon select : /

  6. #6
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonjour,

    A mon humble avis, index ou pas, il faut trier.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL Server 2005 et utilisation des indexes ou autres
    Par orafrance dans le forum Développement
    Réponses: 3
    Dernier message: 02/09/2010, 09h10
  2. [SQL Server 2005 [Express]] récupérer des données
    Par le_ben dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2007, 17h11
  3. [SQL Server 2005] DELETE sur des doublons
    Par Shakta dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/05/2007, 11h13
  4. [Sql server 2005] Comment faire des taches planifiées?
    Par critok dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/05/2006, 12h19
  5. [SQL server 2005 express] liste des erreurs SQL serveur 2005
    Par critok dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/05/2006, 19h17

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