Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT
dbo.Forums.ForumID,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
dbo.Forums.Title,
FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID =
dbo.Categories.CategoryID
GROUP BY dbo.Forums.ForumID,
dbo.Forums.Title,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
ORDER BY dbo.Categories.CategoryName,
dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs
parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrice
Pourquoi 100 % ?
D'après la doc :
"La clause ORDER BY n'est pas valide dans les vues, les fonctions Inline, les tables dérivées et les sous-requêtes, sauf si TOP est également spécifié."
J'ai l'impression que tu utilises une "astuce" pour trier des vues mais que SQL Server se rend compte que le TOP 100/ORDER BY ne "sert à rien"...
Quelqu'un plus au fait du fonctionnement interne pourra peut-être confirmer (ou non) ? Peut-être aussi voir le plan d'éxécution et comparer avec ce qui se passe lorsque tu mets 80 PERCENT par exemple...
-- Patrice
"Christophe Cordonnier" a écrit dans le message de news:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données
ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
Pourquoi 100 % ?
D'après la doc :
"La clause ORDER BY n'est pas valide dans les vues, les fonctions Inline,
les tables dérivées et les sous-requêtes, sauf si TOP est également
spécifié."
J'ai l'impression que tu utilises une "astuce" pour trier des vues mais que
SQL Server se rend compte que le TOP 100/ORDER BY ne "sert à rien"...
Quelqu'un plus au fait du fonctionnement interne pourra peut-être confirmer
(ou non) ? Peut-être aussi voir le plan d'éxécution et comparer avec ce qui
se passe lorsque tu mets 80 PERCENT par exemple...
--
Patrice
"Christophe Cordonnier" <ChristopheCordonnier@discussions.microsoft.com> a
écrit dans le message de
news:85EB9AD4-16F9-4C96-83AA-ABFD82FFAA3A@microsoft.com...
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT
dbo.Forums.ForumID,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
dbo.Forums.Title,
FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID
GROUP BY dbo.Forums.ForumID,
dbo.Forums.Title,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
ORDER BY dbo.Categories.CategoryName,
dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données
ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs
parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/
"La clause ORDER BY n'est pas valide dans les vues, les fonctions Inline, les tables dérivées et les sous-requêtes, sauf si TOP est également spécifié."
J'ai l'impression que tu utilises une "astuce" pour trier des vues mais que SQL Server se rend compte que le TOP 100/ORDER BY ne "sert à rien"...
Quelqu'un plus au fait du fonctionnement interne pourra peut-être confirmer (ou non) ? Peut-être aussi voir le plan d'éxécution et comparer avec ce qui se passe lorsque tu mets 80 PERCENT par exemple...
-- Patrice
"Christophe Cordonnier" a écrit dans le message de news:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données
ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
Fred BROUARD
Bonjour,
Christophe Cordonnier a écrit:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID = dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
1) le langage SQL ne supporte pas les cluase ORDER BY dans les vues. Le truc utilisé par MS SQL Server pour faire plaisir à certains peut se reourner contre eux. Une clause ORDER BY doit s'effectuer en final. C'est d'ailleurs une grande hérésie que de créer des vues avec un ordre BY car cela relentie considérabelement les perfs et ne permetra pas de définir un autre ordre...
2) la collation par défaut de l'installation avec SQL Server 2000 et 2005 est différente. Avez vous pensez à l'installer en correspondance ?
3) pour obtenir toutes les lignes il aurait fallu mettre SELECT TOP 100 PERCENT WITH TIES
A +
Merci d'avance pour votre aide ...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Bonjour,
Christophe Cordonnier a écrit:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT
dbo.Forums.ForumID,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
dbo.Forums.Title,
FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID =
dbo.Categories.CategoryID
GROUP BY dbo.Forums.ForumID,
dbo.Forums.Title,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
ORDER BY dbo.Categories.CategoryName,
dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs
parfaitement bien avec SQL 2000 !
Une idée ?
1) le langage SQL ne supporte pas les cluase ORDER BY dans les vues. Le truc
utilisé par MS SQL Server pour faire plaisir à certains peut se reourner contre
eux. Une clause ORDER BY doit s'effectuer en final.
C'est d'ailleurs une grande hérésie que de créer des vues avec un ordre BY car
cela relentie considérabelement les perfs et ne permetra pas de définir un autre
ordre...
2) la collation par défaut de l'installation avec SQL Server 2000 et 2005 est
différente. Avez vous pensez à l'installer en correspondance ?
3) pour obtenir toutes les lignes il aurait fallu mettre
SELECT TOP 100 PERCENT WITH TIES
A +
Merci d'avance pour votre aide ...
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID = dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
1) le langage SQL ne supporte pas les cluase ORDER BY dans les vues. Le truc utilisé par MS SQL Server pour faire plaisir à certains peut se reourner contre eux. Une clause ORDER BY doit s'effectuer en final. C'est d'ailleurs une grande hérésie que de créer des vues avec un ordre BY car cela relentie considérabelement les perfs et ne permetra pas de définir un autre ordre...
2) la collation par défaut de l'installation avec SQL Server 2000 et 2005 est différente. Avez vous pensez à l'installer en correspondance ?
3) pour obtenir toutes les lignes il aurait fallu mettre SELECT TOP 100 PERCENT WITH TIES
A +
Merci d'avance pour votre aide ...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Med Bouchenafa
SQL Server ne garantit l'ordre des données que s'il existe explicitement une clause ORDER BY dans l'instruction SELECT Même s'il existe un ORDER BY dans la construction interne de la vue, il faut absolument que tu rajoutes un ORDER BY comme ceci SELECT * FROM NomVue ORDER BY CategoryName, Title
Sans une clause ORDER BY explicite, les résultats peuvent être différents de ceux obtenus avec une version antérieure de SQL Server.
-- Bien cordialement Med Bouchenafa
"Christophe Cordonnier" a écrit dans le message de news:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
SQL Server ne garantit l'ordre des données que s'il existe explicitement une
clause ORDER BY dans l'instruction SELECT
Même s'il existe un ORDER BY dans la construction interne de la vue, il faut
absolument que tu rajoutes un ORDER BY comme ceci
SELECT * FROM NomVue ORDER BY CategoryName, Title
Sans une clause ORDER BY explicite, les résultats peuvent être différents de
ceux obtenus avec une version antérieure de SQL Server.
--
Bien cordialement
Med Bouchenafa
"Christophe Cordonnier" <ChristopheCordonnier@discussions.microsoft.com> a
écrit dans le message de news:
85EB9AD4-16F9-4C96-83AA-ABFD82FFAA3A@microsoft.com...
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT
dbo.Forums.ForumID,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
dbo.Forums.Title,
FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID
GROUP BY dbo.Forums.ForumID,
dbo.Forums.Title,
dbo.Categories.CategoryID,
dbo.Categories.CategoryName,
ORDER BY dbo.Categories.CategoryName,
dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données
ne
sont pas classées pareils ! Une requête qui fonctionne par ailleurs
parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/
SQL Server ne garantit l'ordre des données que s'il existe explicitement une clause ORDER BY dans l'instruction SELECT Même s'il existe un ORDER BY dans la construction interne de la vue, il faut absolument que tu rajoutes un ORDER BY comme ceci SELECT * FROM NomVue ORDER BY CategoryName, Title
Sans une clause ORDER BY explicite, les résultats peuvent être différents de ceux obtenus avec une version antérieure de SQL Server.
-- Bien cordialement Med Bouchenafa
"Christophe Cordonnier" a écrit dans le message de news:
Dans l'analyseur de requête de SQL 2005 j'exécute la requête suivante :
SELECT TOP 100 PERCENT dbo.Forums.ForumID, dbo.Categories.CategoryID, dbo.Categories.CategoryName, dbo.Forums.Title, FROM dbo.Forums RIGHT OUTER JOIN dbo.Categories ON dbo.Forums.CategoryID > dbo.Categories.CategoryID GROUP BY dbo.Forums.ForumID, dbo.Forums.Title, dbo.Categories.CategoryID, dbo.Categories.CategoryName, ORDER BY dbo.Categories.CategoryName, dbo.Forums.Title
Le problème est que quand je met la même requête dans une vue les données ne sont pas classées pareils ! Une requête qui fonctionne par ailleurs parfaitement bien avec SQL 2000 !
Une idée ?
Merci d'avance pour votre aide ...
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
Christophe Cordonnier
Etant un grand garçon qui ne se laisse pas abattre j'en suis arrrivé à la même conclusion :) J'ai viré le ORDER BY de la vue (Base qui n'a pas été créée par mes soins), et j'ai rajouté ce ORDER BY dans la procédure stockée appelant la vue et là plus de problème.
Merci beacoup pour la réponse car au moins elle confirme mon axe de recherche :)
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
"Med Bouchenafa" a écrit :
SQL Server ne garantit l'ordre des données que s'il existe explicitement une clause ORDER BY dans l'instruction SELECT Même s'il existe un ORDER BY dans la construction interne de la vue, il faut absolument que tu rajoutes un ORDER BY comme ceci SELECT * FROM NomVue ORDER BY CategoryName, Title Sans une clause ORDER BY explicite, les résultats peuvent être différents de ceux obtenus avec une version antérieure de SQL Server. -- Bien cordialement Med Bouchenafa
Etant un grand garçon qui ne se laisse pas abattre j'en suis arrrivé à la
même conclusion :) J'ai viré le ORDER BY de la vue (Base qui n'a pas été
créée par mes soins), et j'ai rajouté ce ORDER BY dans la procédure stockée
appelant la vue et là plus de problème.
Merci beacoup pour la réponse car au moins elle confirme mon axe de
recherche :)
--
Christophe - MVP Windows Mobile
http://www.windows-mobile.info/
"Med Bouchenafa" a écrit :
SQL Server ne garantit l'ordre des données que s'il existe explicitement une
clause ORDER BY dans l'instruction SELECT
Même s'il existe un ORDER BY dans la construction interne de la vue, il faut
absolument que tu rajoutes un ORDER BY comme ceci
SELECT * FROM NomVue ORDER BY CategoryName, Title
Sans une clause ORDER BY explicite, les résultats peuvent être différents de
ceux obtenus avec une version antérieure de SQL Server.
--
Bien cordialement
Med Bouchenafa
Etant un grand garçon qui ne se laisse pas abattre j'en suis arrrivé à la même conclusion :) J'ai viré le ORDER BY de la vue (Base qui n'a pas été créée par mes soins), et j'ai rajouté ce ORDER BY dans la procédure stockée appelant la vue et là plus de problème.
Merci beacoup pour la réponse car au moins elle confirme mon axe de recherche :)
-- Christophe - MVP Windows Mobile http://www.windows-mobile.info/
"Med Bouchenafa" a écrit :
SQL Server ne garantit l'ordre des données que s'il existe explicitement une clause ORDER BY dans l'instruction SELECT Même s'il existe un ORDER BY dans la construction interne de la vue, il faut absolument que tu rajoutes un ORDER BY comme ceci SELECT * FROM NomVue ORDER BY CategoryName, Title Sans une clause ORDER BY explicite, les résultats peuvent être différents de ceux obtenus avec une version antérieure de SQL Server. -- Bien cordialement Med Bouchenafa