Bonjour,
Mon problème est le suivant: je cherche un équivalent de la fonction EXPLAIN (de MySQL) en SQLServer.
Est-ce possible? Pouvez-vous m'aider?
Version imprimable
Bonjour,
Mon problème est le suivant: je cherche un équivalent de la fonction EXPLAIN (de MySQL) en SQLServer.
Est-ce possible? Pouvez-vous m'aider?
Si j'ai bien compris la fonction MySQL... la traduction devrait etre:
SET SHOWPLAN_XML ON
Vous avez 7 méthodes pour obtenir un plan de requêtes dans SSMS (SQL Server management Studio) :
1 - graphique
1.1 - estimation (pas d'exécution) => CTRL + L (ou menu "Requête" / "Afficher le plan d'exécution estimé")
1.2 - plan exécuté => CTRL + M (ou "Requête" / "Inclure le plan d'exécution réel")
Dans les deux cas, vous pouvez sauvegarder le plan résultant sous forme d'un fichier XML.
2 - non graphique
2.1 - estimé :
2.1.1 - sous forme textuelle : SET SHOWPLAN_TEXT ON
2.1.2 - sous forme XML : SET SHOWPLAN_XML ON
2.1.3 - sous forme textuelle détaillée : SET SHOWPLAN_ALL ON
2.2 - réalisé :
2.2.1 - sous forme textuelle : SET STATISTICS PROFILE ON
2.2.2 - sous forme XML : SET STATISTICS XML ON
(utiliser OFF pour désactiver)
La commande qui correspond le plus à EXPLAIN est :
- SET SHOWPLAN_ALL ON (estimé)
- SET STATISTICS PROFILE ON (réalisé)
A +
Merci pour vos réponses, mais je débute et j'ai encore une petite question.
En fait, je travaille sur une application en java qui traite du sqlserver et je voudrais donc stocker dans un Objet java ce qui est renvoyé par SET SHOWPLAN_XML sur une seule requête. Est-ce possible? si oui, dans quel Objet et où l'insérer dans le code? Après SHOWPLAN_XML ON? la requête? OFF?
Essayez comme ceci à travers une IHM :
A +Code:
1
2
3
4
5
6
7
8 SET SHOWPLAN_XML ON; DECLARE @T TABLE (C XML); INSERT INTO @T EXEC ('SELECT * FROM sys.databases'); SELECT * FROM @T;
Bonjour,
Petite remarque : il manque un GO après le SET SHOWPLAN_XML ON ;)
@++ ;)
Encore merci, mais je n'y arrive toujours pas malheureusement...
Je ne sais pas quelle classe utiliser pour exécuter le DECLARE.
Pour les précédentes requêtes que j'exécutais, j'utilisais une SqlMapSession mais si je fais le DECLARE et ensuite INSERT, il y a une erreur qui s'affiche me disant que le tableau n'a pas été déclaré.
Il fut utiliser un commandtext et non un Query.
Sinon, encapsuler le tout dans une procédure stockée.
A +
je suis désolée mais je débute et je ne connais aucune des 2 solutions...
Après avoir regardé sur internet j'ai découvert ce qu'était une procédure stockée mais je ne m'en sors pas...
Et en ce qui concerne commandtext je n'ai rien trouvé sur internet
Je n'ai toujours pas réussi à résoudre mon problème... si quelqu'un a une solution je suis toute ouie :oops:
1) nous ne savons pas avec quel outil / langage vous développez côté client
2) ceci n'est pas du ressort du SGBDR
3) postez dons dans le forum approprié !
A +
Tout d'abord je tiens à préciser que je débute complètement alors excusez moi si je ne vous ai pas apporté toutes les informations qui vous serez nécessaires mais il suffisait de demander.
1) je développe en java avec eclipse et mon travail exploite des données se trouvant sur des bases SQLServer 2000 et 2005.
2) je pense que vous auriez pu m'expliquer comment faire une procédure stockée à partir du code que vous m'aviez proposé ci-dessus
3) vous aviez l'air de pouvoir répondre à mes questions... sinon je vous assure que je n'aurais pas insisté.
1) pour java, postez dans le forum Java
2) procédure stockée : voir http://sqlpro.developpez.com/cours/s...ransactsql/#L4
Exemple :
3) Oui, mais je ne suis pas toujours dispo, et comme je bosse pour des clients qui eux payent, je leur donne la priorité. Au passage mon tarif actuel est de 1250 € HT par jour...Code:
1
2
3
4
5
6
7
8
9
10
11
12 CREATE PROCEDURE ??? @QUERY VARCHAR(8000) AS SET SHOWPLAN_XML ON; DECLARE @T TABLE (C XML); INSERT INTO @T EXEC (@QUERY); SELECT * FROM @T;
A +
Merci pour le coup de main