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 :

Enregistrements dans le désordre


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Par défaut Enregistrements dans le désordre
    Bonjour,

    j'ai un souci lorsque je fais une requête sans "order by". J'ai alors comme résultat des enristrements qui ne se retrouvent dans le désordre, pas celui de création des enregistrements (ou un désordre organisé). Je m'explique :
    J'ai une table "matable" avec X enregistrements :
    ID
    journee
    champ1

    si je visualise la table j'ai les enregistrements de l'ID_1 à ID_X

    si je fais une requête "select * from matable where journee='10/12/2008';", j'ai l'ID_1 puis l'ID_2, puis l'ID_28 à ID_X puis l'ID_3 à ID_27.

    si je fais ma requete sur une autre journée, j'ai le même type de résultat avec les 2 premiers enregistrements puis le reste avec à la fin 24 enregistrements qui aurait du se trouver au 3ème rang.

    Si je force l'ordre en mettant un order by sur le ID, ça me met bien dans l'ordre de création des enregistrements.

    Je fais cette requête sous SQL server management sous SQL server 2000 et j'ai donc forcément le même souci avec l'appli que je développe.

    quelqu'un peut il m'éclairer? s'agit'il d'un problème de paramétrage?

    Merci

  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
    22 021
    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 : 22 021
    Billets dans le blog
    6
    Par défaut
    Dans une base de données relationnelle IL N'Y A PAS D'ENREGISTREMENT ni aucune notion d'ordre et cela par nature !

    Lisez les articles que j'ai écrit à ce sujet pour vous en convaincre :
    http://blog.developpez.com/sqlpro/p5...sont-des-ense/
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2

    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/ * * * * *

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Par défaut
    Si je ne me trompe pas, si on spécifie pas d'order by, on devrait avoir les enregistrements dans leur ordre de création , non?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    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 : 22 021
    Billets dans le blog
    6
    Par défaut
    1) vous n'avez rien compris
    2) vous ne lisez pas

    Bref, vous risquez de rester toute votre vie dans l'ignorance la plus totale.

    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/ * * * * *

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Par défaut
    merci à vous. c'est toujours agréable de se sentir aidé par un enseignant si pédagogue qui se contente de faire référence à des liens vers des cours complets qu'il a pu écrire plutôt que d'expliquer clairement (moi aussi je sais écrire en rouge).

    1) non je n'ai pas compris (et c'est donc pour ça que j'ai reposé la question autrement)
    2) j'ai bien compris que vous ne m'étiez d'aucune utilité

    Grâce à vous, il est clair que je vais rester dans l'ignorance la plus totale. Il me semblait que le but des forums était de fournir de l'aide en discutant plutôt qu'en descendant les gens qui, il est vrai ne connaissent pas le sujet et donc la réponse (c'est sans doute pour ça qu'ils posent des questions sur ces forums)...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    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 : 22 021
    Billets dans le blog
    6
    Par défaut
    Puisque vous êtes d'un effrayante bétise, voici la recopie intégrale du contenu du premier lien cité dans le premier message...

    **********************************************************

    Les données d'une base SQL sont des ensembles...

    Beaucoup de jeunes développeurs considèrent à tort une base de données comme s'il s'agissait d'écrire des enregistrement dans des fichiers. Il n'en est rien. Les notions de fichiers, d'enregistrement et autres concepts matériels n'existe en aucune façon dans le fonctionnement logique d'un serveur de bases de données relationnelles...

    Voyons la chose de manière concrète avec un exemple... Y a t-il un ordre des données dans une table ?

    Le script ci dessous met en évidence le fait qu'il n'existe aucun ordre pré établis dans une base de données relationnelles. Toute table est l'équivalent d'un sac de bille. La question suivante :
    Dans quel ordre les billes ont-elles été rangées ?
    N'a bien évidemment aucun sens...

    Démonstration : (les exemples sont données pour MS SQL Server, mais peuvent être reproduits sous n'importe quel SGBDR et donnerons des résultats similaires [ce qui ne veut pas dire identiques !!!]...)

    -- créons la base de données
    CREATE DATABASE DB_LIGNES
    GO
    -- plaçons nous dedans
    USE DB_LIGNES
    GO
    -- créons une table de travail
    CREATE TABLE T_LIGNES
    (C INT NOT NULL,
    D CHAR(16),
    E CHAR(32) DEFAULT '*')
    GO
    -- insérons quelques lignes
    INSERT INTO T_LIGNES (C, D) VALUES (1, 'Z')
    INSERT INTO T_LIGNES (C, D) VALUES (2, 'Y')
    INSERT INTO T_LIGNES (C, D) VALUES (3, 'X')
    INSERT INTO T_LIGNES (C, D) VALUES (4, 'W')
    INSERT INTO T_LIGNES (C, D) VALUES (5, 'V')

    Et maintenant, notre premier SELECT.
    (Ce sera exactement le même pendant toute la démo....)

    SELECT C, D FROM T_LIGNES

    C D
    ----------- ----------------
    1 Z
    2 Y
    3 X
    4 W
    5 V

    Apparament les lignes sont dans l'ordre d'insertion


    -- supprimons une ligne
    DELETE FROM T_LIGNES WHERE C = 3
    GO
    -- insérons une 6e ligne :
    INSERT INTO T_LIGNES (C, D) VALUES (6, 'U')
    GO

    Second SELECT identique au précédent :

    SELECT C, D FROM T_LIGNES

    C D
    ----------- ----------------
    1 Z
    2 Y
    6 U
    4 W
    5 V

    Patatras... la ligne 6 est en 3e position... Il semble que l'emplacement de la ligne 3 qui a été supprimée a été réutilisé...

    Créons maintenant une clef primaire sur la colonne C de la table

    ALTER TABLE T_LIGNES
    ADD CONSTRAINT PK PRIMARY KEY (C)
    GO

    Troisième SELECT :

    SELECT C, D FROM T_LIGNES

    C D
    ----------- ----------------
    1 Z
    2 Y
    4 W
    5 V
    6 U

    Re belote... un nouvel ordre des lignes apparaît !

    Ajoutons un index à la table :

    CREATE INDEX X ON T_LIGNES (D, C)

    Faisons un quatrième et dernier SELECT :

    SELECT C, D FROM T_LIGNES

    C D
    ----------- ----------------
    6 U
    5 V
    4 W
    2 Y
    1 Z

    Bingo, nouvel ordre des données...

    4 SELECT identiques, 4 ordres des lignes différents... Êtes vous enfin convaincu qu'il n'existe aucun ordre dans les bases de données ?
    En fait, et on ne le répétera jamais assez, une table c'est comme un sac de bille... Retrouver la Xeme bille que l'on y a mis n'a donc aucun sens !

    Un peu plus loin...

    Récemment un internaute se demandais pourquoi alors qu'il mettait un ORDER BY dans une vue (hélas certains SGBDR permettent une telle aberration...) le résultat de son SELECT sur cette vue ne respectait pas l'ordre imposé !


    **********************************************************

    Maintenant je peut aussi vous mettre la recopie intégrale du second lien...

    Mais je dois reconnaître qu'il est parfaitement désespérant d'essayer d'aider une personne aussi bornée que vous.

    En sus je vous signale qu'il existe des règles de postage que vous auriez dû lire :
    http://www.developpez.net/forums/d96...vement-poster/
    Ce qui fait que si vous les aviez appliquées, vous seriez sans doute tomber sur cet article que j'ai écrit afin de répondre préventivement à ce genre de question...

    Donc vous êtes quintuplement coupable :
    1) de ne pas avoir respecter les règles de postage
    2) de n'avoir pas fait l'effort de chercher
    3) de ne pas lire les messages que l'on vous donne ainsi que les liens
    4) de râler lorsque l'on vous fait la remarque de votre bêtise
    5) de faire perdre du temps à la communauté !


    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. copie d'un enregistrement dans une deuxième table
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/03/2004, 13h51
  2. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 01h59
  3. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 10h56
  4. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 10h37
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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