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 Server2005]Un bug étrange


Sujet :

MS SQL Server

  1. #1
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut [SQL Server2005]Un bug étrange
    Bonjour,
    Comme l'indique le titre, je suis confronté à un comportement assez étrange. Je fait deux requêtes quasiment identiques (la première porte sur deux colonnes, la seconde sur une seule) sur les mêmes données dans la même table. (cf la copie d'écran jointe)

    La seconde me renvoie un genre de concaténation de données provenant d'une autre table .

    Ce problème ne me bloque absolument pas mais cela m'intrigue quand même.

    Quelqu'un aurait-il une idée de l'origine de cette bizarrerie?

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Intéressant, on se croirait dans Access où "nom" est ambigu.

    Peux-tu faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SET SHOWPLAN_XML ON
    GO
     
    SELECT DISTINCT nom FROM Logs_SP
    GO
     
    SET SHOWPLAN_XML OFF
    GO
    et poster le XML de résultat ?

  3. #3
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut
    Voilà le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.0" Build="9.00.2050.00">
      <BatchSequence>
        <Batch>
          <Statements>
            <StmtSimple StatementText=" &#xD;&#xA;SELECT DISTINCT nom FROM Logs_SP&#xD;&#xA;" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="2.10879" StatementEstRows="10093" StatementOptmLevel="FULL">
              <StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="false" ANSI_NULLS="false" ANSI_PADDING="false" ANSI_WARNINGS="false" NUMERIC_ROUNDABORT="false" />
              <QueryPlan CachedPlanSize="9">
                <RelOp NodeId="0" PhysicalOp="Hash Match" LogicalOp="Aggregate" EstimateRows="10093" EstimateIO="0" EstimateCPU="1.40851" AvgRowSize="38" EstimatedTotalSubtreeCost="2.10879" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                  <OutputList>
                    <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                  </OutputList>
                  <MemoryFractions Input="1" Output="1" />
                  <Hash>
                    <DefinedValues />
                    <HashKeysBuild>
                      <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                    </HashKeysBuild>
                    <BuildResidual>
                      <ScalarOperator ScalarString="[MaBase].[dbo].[Logs_SP].[nom] = [MaBase].[dbo].[Logs_SP].[nom]">
                        <Compare CompareOp="IS">
                          <ScalarOperator>
                            <Identifier>
                              <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                            </Identifier>
                          </ScalarOperator>
                          <ScalarOperator>
                            <Identifier>
                              <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                            </Identifier>
                          </ScalarOperator>
                        </Compare>
                      </ScalarOperator>
                    </BuildResidual>
                    <RelOp NodeId="1" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="118482" EstimateIO="0.569792" EstimateCPU="0.130487" AvgRowSize="38" EstimatedTotalSubtreeCost="0.700279" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                      <OutputList>
                        <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                      </OutputList>
                      <IndexScan Ordered="0" ForcedIndex="0" NoExpandHint="0">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Column="nom" />
                          </DefinedValue>
                        </DefinedValues>
                        <Object Database="[MaBase]" Schema="[dbo]" Table="[Logs_SP]" Index="[PK_Logs_SP]" />
                      </IndexScan>
                    </RelOp>
                  </Hash>
                </RelOp>
              </QueryPlan>
            </StmtSimple>
          </Statements>
        </Batch>
      </BatchSequence>
    </ShowPlanXML>

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    A priori, rien d'inquiétant.
    Que donne ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DBCC CHECKTABLE ('dbo.Logs_SP')

  5. #5
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut
    Voici le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBCC results for 'Logs_SP'.
    There are 118727 rows in 767 pages for object "Logs_SP".
    En tout cas, merci de t'intéresser à mon problème.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Je vérifierais la structure de tous les index de la table.

    S'il n'existe pas d'index sur le champ nom, j'en ferais un...

    Et si tu fais la requête plus explicite?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DBCC DROPCLEANBUFFERS 
     
    SELECT T1.[NOM]
    FROM Logs_SP T1

  7. #7
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut
    De plus en plus étrange...
    J'ai créé l'index suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE NONCLUSTERED INDEX [I_Nom] ON [dbo].[Logs_SP] 
    (
    	[nom] ASC
    )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
    Le résultat c'est un peu amélioré
    Les 17 premiers résultats affichés sont bon mais pour les 10200 autres, aucun changement.

    PS: j'avais oublié de préciser que ces mêmes requêtes sans le DISTINCT donnent le résultat escompté.

  8. #8
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Vraiment un problème inédit et intéressant.

    - Peux-tu poster le script de création de la table ?
    - Si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * INTO dbo.logs_temp
    FROM dbo.Logs_SP
    GO
     
    SELECT DISTINCT nom FROM dbo.logs_temp
    GO
    Qu'est-ce que ça donne ?

  9. #9
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut
    Voilà le script de création de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE [dbo].[Logs_SP](
    	[id] [int] IDENTITY(1,1) NOT NULL,
    	[nom] [varchar](150) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL,
    	[date] [datetime] NOT NULL,
     CONSTRAINT [PK_Logs_SP] PRIMARY KEY CLUSTERED 
    (
    	[id] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    En ce qui concerne la requête proposée, aucun changement, le problème est le même.

  10. #10
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Et tu es sûr que ce n'est pas simplement vraiment le contenu de la table ?

    Ces deux requêtes donnent vraiment des résultats différents ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT DISTINCT Nom
    FROM [MaBase].[dbo].[Logs_SP]
    ORDER BY id
     
    SELECT DISTINCT id, Nom
    FROM [MaBase].[dbo].[Logs_SP]
    ORDER BY id

  11. #11
    Membre chevronné
    Homme Profil pro
    /
    Inscrit en
    Février 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : /

    Informations forums :
    Inscription : Février 2003
    Messages : 434
    Par défaut
    Le serveur a été redémarré pour des raisons qui n'ont rien à voir avec le cas qui me concernait mais maintenant qu'il est de nouveau accessible, plus moyen de reproduire le problème...

    Pour ma part, le sujet est clos faute de possibilités de tests.

    Merci pour toutes vos idées.

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

Discussions similaires

  1. connection .net et sql server2005
    Par tinhinan6 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/03/2007, 10h09
  2. Bug étrange sur du single
    Par rodymary dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 31/08/2006, 15h52
  3. Réponses: 4
    Dernier message: 12/06/2006, 15h43
  4. Bug étrange
    Par xavier faure dans le forum Langage
    Réponses: 4
    Dernier message: 01/04/2006, 13h54
  5. [VB6]Bug étrange lié à l'horloge...
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/02/2006, 15h19

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