|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : décembre 2010 Messages : 125 ![]() |
Bonjour,
parfois, lorsque j'excute une grande query, un résultat intermédiaire est affiché en bas de ma requete, alors que la requête continue a tourner. Est-ce normal ? Et comment peut-on changer ces paramètres ? Car il est peut être fort interessant de déjà visualiser une partie des résulats avant la fin de la requête. Merci d'avance. |
|
|
01
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
Bonjour,
Difficile à dire sans la requête ou sous squelette. S'il s'agit d'une seule requête, c'est probablement un avertissement qui apparaît dans la console (Onglet "Messages"). S'il s'agit d'un lot contenant plusieurs requêtes, leurs résultars respectifs sont retournés dans l'ordre d'exécution. S'il s'agit d'instructions PRINT et que vous ne souhaitez pas attendre pour qu'elles soient affichées dans la console, utilisez RAISERROR('monMessage', 1, 1) WITH NOWAIT @++
__________________
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 |
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : décembre 2010 Messages : 125 ![]() |
Merci pour votre réponse.
Cependant, étant encore novice en SQL, je ne comprends pas trop ou placer votre code RAISERROR('monMessage', 1, 1) WITH NOWAIT, et aussi, que fait-il ?! Et pour information, il s'agit d'une seule (grande) requête, sans fonction PRINT. Merci pour votre soutien. |
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
OK, je comprends mieux : en fait SQL Server (le moteur de bases de données) retourne à SQL Server Management Studio (SSMS, la GUI qui permet de naviguer dans les bases de données) les lignes du résultat de votre requête (qui peuvent être très nombreuses) à la vitesse du réseau (ce qui ne signifie pas que votre réseau est lent
Ceci fait que votre requête "tourne" toujours alors que des lignes commencent à être affichées dans SSMS Pour le RAISERROR, si vous aviez eu plusieurs requêtes qui s'exécutent les une à la suite des autres dans un script par exemple, vous voulez peut-être savoir ou vous en êtes dans l'exécution du script. Vous pouvez donc utiliser PRINT, mais cette instruction n'affiche pas votre commentaire dès qu'il est exécuté. RAISERROR vous permet normalement de générer des erreurs dans vos procédures stockées ou vos triggers. Je vous ai proposé ici une utilisation quelque peu détournée qui permet d'afficher un message immédiatement sans arrêter le traitement en cours Citation:
@++
__________________
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 |
|
|
00
|
|
|
#5 | |||||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Comme vous l'a expliqué elsuket, le moteur renvoi les lignes au client au fur et a mesure. Si vous faites une simple requete select dans une grosse table : vous aurez rapidement les premières lignes déjà lues, pendant que le moteur continuera de lire les lignes suivantes... Par contre si votre ajoutez par exemple un "ORDER BY" : Code sql :
Vous pouvez utiliser TOP pour limiter le nombre de résultats et ainsi avoir rapidement un aperçu de ce donne votre requete. Mais Attention Code sql :
Si vous voulez juste un jeu d'essai, vous pouvez faire ainsi : Code sql :
Mais attention aux résultats qui risquent d'être faussés, car rien ne vous garantit quelles lignes de votre table seront renvoyé par la sous requete ! Ça permet juste d'avoir un "aperçu" rapidement de ce que peut donner votre requete... |
|||||||
|
|
00
|
|
|
#6 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 665 ![]() |
Bien vu aieeeuuuuu
On peut aussi avoir un aperçu avec l'option TABLESAMPLE : Code :
Code :
__________________
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 |
||||
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Si l'affichage des lignes à déjà commencé c'est que la requête est déjà terminée dans le moteur relationnel. Il n'y a que le flux de donnée qui peut mettre du temps à alimenter l'IHM.
Seule exception, si l'option FASTFIRSTROW a été activée. 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 * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com