Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2011, 17h42   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2008
Messages : 32
Points : 11
Points : 11
Par défaut [SQLSERVER 2008 - order by ] : différence de comportement selon l'environnement

Bonjour,

Je sollicite votre aide pour un problème des plus étranges....

Sur notre environnement de développement (SQLSERVER2008), nous utilisons une procédure stockés contenant des requêtes imbriquées et des tables temporaires (assez complexe) le tout trié sur une colonne précise (date).
pas de souci, que ce soit en exécutant la proc ou bien en la visualisant sur l'application web, ca fonctionne.
Nous avons livré cette même proc sur l'environnement de pré-prodcution (SQLServer2008 R2) et là ca ne fonctionne pas ! il ya une sorte de tri puisque que nous pouvons voir des paquets de même date ensemble mais pas sur la totalité des données ....
Nous avons vérifié que nous étions sur le bon environnement, que la proc a bien été compilé, que c'était la bonne proc sur l'environnement. J'ai copié les donénes de pré-prod en dev pour être iso entre les environnements...

Bref, je suis perdue.... Avez-vous déjà rencontré un problème similaire? avez-vous des idée de piste ?
Pour le moment, j'ai demandé l'upgrade de la version du serveur de dev mais ca me parait étrange que ce soit ca...

Merci d'avance pour vos retours

Bonne fin de journée
Maryline
maryline999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 17h55   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Quelle est la clause ORDER BY ?
S'il n'y pas de clause ORDER BY, c'est "presque" normal ...

En SQL, il n'y a pas d'ordre : ni dans les colonnes, ni dans les lignes, c'est à dire que l'ordre des colonnes n'influe pas sur le résultat de la requête, et l'ordre des lignes non plus ... sauf dans le cas d'un TOP, qui n'est pas (lui non plus) un opérateur ensembliste

En conséquence, SQL Server, de l'une à l'autre table, peut choisir un index différent, suivant le volume de données et/ou la "fraîcheur" des statistiques de distribution des valeurs dans la colonne, ou la valeur des paramètres (mais pour ce dernier élément, ce n'est apparemment pas votre cas).
Dès lors le résultat de votre requête sera "ordonné" suivant cet index.

Pouvez vous donner la requête ainsi que le script de création des tables utilisées par la requête, afin que nous voyions les index ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/07/2011, 18h40   #3
Modérateur
 
Avatar de sevyc64
 
Homme Yves
Développeur informatique
Inscription : janvier 2007
Messages : 3 878
Détails du profil
Informations personnelles :
Nom : Homme Yves
Âge : 39
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2007
Messages : 3 878
Points : 7 655
Points : 7 655
Et je rajouterai pour la culture de tous, que, sans clause Order by, une même requete sur la même table du même serveur peut renvoyer un tri différent à plusieurs jours d’intervalle.
__________________
Sevyc64 --- Le partage est notre force

NON AU LANGAGE SMS & FAUTES VOLONTAIRES SUR LES FORUMS
sevyc64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 09h19   #4
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 32
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2008
Messages : 32
Points : 11
Points : 11
Bonjour,

tout d'abord merci pour vos réponses.

Sur la requête, il y a une clause order by sur 2 colonnes (colonne erreur et colonne date de livraison)

un index spécifique a été mis en place sur 3 colonnes (colonnes appartenant à la clé) et les 2 colonnes de l'order by n'appartiennent pas à cet index.
Le même index a été mis en place sur les 2 environnements. est-ce que le comportement peut etre différents ?
par contre si l'index est d'abord mis en place puis l'order by alors je comprends mieux le "pseudo tri" que je vois dans la table.

De plus, sur l'environnement de pré-production, ce n'est jamais le même affichage comme si le order by n'était pris en compte...

Par contre, j'ai récupéré le plan d'execution des 2 procs. il existe quelques différences mais j'ai pas l'impression que ce soit ça le problème ...

Merci pour la piste de l'index, je vais creuser par là ... ;-)

Maryline
maryline999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h02   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Il faudrait votre code complet, car un ODER BY n'est pas forcément respecté :
1) jamais dans une vue
2) probablement pas avec une clause TOP

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 11h20   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Bonjour,
Citation:
Nous avons livré cette même proc sur l'environnement de pré-prodcution (SQLServer2008 R2) et là ca ne fonctionne pas ! il ya une sorte de tri puisque que nous pouvons voir des paquets de même date ensemble mais pas sur la totalité des données ....
En prod, constatez vous ce phénomère sous SSMS ou uniquement sur l'appli cliente?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h25.


 
 
 
 
Partenaires

Hébergement Web