Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 16/05/2011, 10h36   #1
Invité de passage
 
Inscription : avril 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 3
Points : 0
Points : 0
Par défaut SQL Server 2005 : obtenir une chaîne vide au lieu des NULL dans un jeu de résultat au format texte

Bonjour à tous,

j'ai un problème assez basique mais auquel je ne trouve pas de solution simple suite à passage de SQL Server 2000 à 2005 :

J'ai une requête complexe dont l'exécution dure plusieurs heures et alimente une grosses table décisionnelle destinée à être exportée sous EXCEL.
Dans cette table, un certain nombre de colonnes peuvent être retournées à NULL par la requête.

Lorsque j'était sous 2000, le résultat restitué au format texte sous l'analyseur de requête me ramenait des chaînes vides au lieu de la valeur explicite 'NULL'. Je faisais un copier/coller de tout ça dans EXCEL et basta !

Depuis que je suis en 2005, le comportement est différent puisque j'ai systématiquement 'NULL' dans mes résultats et le même 'NULL' à l'arrivée dans EXCEL. J'ai essayé de faire un chercher/remplacer sous EXCEL mais le nombre trop important de données fait que ça n'aboutit pas (idem sous Notepad++) !

Je cherche à revenir au comportement de 2000 sur ce cas de figure. Y-a-t-il une simple option pour y parvenir (si oui, laquelle ?) ou suis-je condamné à revoir l'écriture de la requête (de la mort) pour virer mes 'NULL' à l'arrivée?

Merci de votre aide !!
achottin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 10h51   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
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 668
Points : 8 718
Points : 8 718
Bonjour,

Citation:
J'ai une requête complexe dont l'exécution dure plusieurs heures et alimente une grosses table décisionnelle destinée à être exportée sous EXCEL.
SQL Server Integration Services est tout à fait à même de faire cela pour vous.
Un rapport sous SQL Server Reporting Services vous permettrait probablement de vous passer de ce fastidieux copier-coller, d'autant qu'on peut exporter un rapport sous Excel

Citation:
Je cherche à revenir au comportement de 2000 sur ce cas de figure. Y-a-t-il une simple option pour y parvenir (si oui, laquelle ?) ou suis-je condamné à revoir l'écriture de la requête (de la mort) pour virer mes 'NULL' à l'arrivée?
Vous devez changer la liste des colonnes du SELECT en utilisant la fonction ISNULL() :

Code :
SELECT	ISNULL(maColonne, '') AS maColonne
Pour le "de la mort", et étant donné que la requête semble requérir un temps d'exécution long, je suppose que :

- soit votre modèle est mauvais,
- soit que les colonnes sur lesquelles vous filtrez ne sont pas proprement indexées
- soit que votre requête est du type "spaghetti"

@++
__________________
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 00
Vieux 16/05/2011, 13h53   #3
Invité de passage
 
Inscription : avril 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 3
Points : 0
Points : 0
Merci Nicolas,

le modèle de la base est éprouvé, les tables indexées comme il se doit et on est au taquet pour ce qui concerne l'optimisation je pense. Le "de la mort" correspond plutôt à une multitude de calculs intermédiaires assez incompressibles.

Il est évident cependant que des améliorations du type mise en oeuvre sous SQL Server Integration Services seraient à recommander.

Je cherchais juste (dans l'esprit artisanal dans lequel nous avons l'habitude de travailler, même si, certes, ce n'est pas la panacée) un "truc" qui permette d'obtenir directement au format texte dans l'analyseur les résultats de ma requête sans que "NULL" s'affiche explicitement à l'image de ce qui se passait sous 2000.

Quoi qu'il en soit merci beaucoup!
achottin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 15h16   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
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 668
Points : 8 718
Points : 8 718
Citation:
le modèle de la base est éprouvé, les tables indexées comme il se doit et on est au taquet pour ce qui concerne l'optimisation je pense
Si une revue des requêtes ont un temps d'exécution un peu long et/ou qui lisent un peu trop de pages est effectuée régulièrement, alors je veux bien te croire

Citation:
Le "de la mort" correspond plutôt à une multitude de calculs intermédiaires assez incompressibles.
Cela n'indique pas de quelle nature ils sont, et si par exemple on pourrait les faire exécuter à une application ou à un objet d'assembly.

Citation:
Je cherchais juste (dans l'esprit artisanal dans lequel nous avons l'habitude de travailler, même si, certes, ce n'est pas la panacée) un "truc" qui permette d'obtenir directement au format texte dans l'analyseur les résultats de ma requête sans que "NULL" s'affiche explicitement à l'image de ce qui se passait sous 2000.
Il est vrai qu'on ne peut pas dire que l'interfaçage entre Office et SQL Server soit du meilleur acabit ...

@++
__________________
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 00
Vieux 17/05/2011, 14h32   #5
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
Citation:
Bonjour à tous,

j'ai un problème assez basique mais auquel je ne trouve pas de solution simple suite à passage de SQL Server 2000 à 2005 :

J'ai une requête complexe dont l'exécution dure plusieurs heures et alimente une grosses table décisionnelle destinée à être exportée sous EXCEL.
Dans cette table, un certain nombre de colonnes peuvent être retournées à NULL par la requête.

Lorsque j'était sous 2000, le résultat restitué au format texte sous l'analyseur de requête me ramenait des chaînes vides au lieu de la valeur explicite 'NULL'. Je faisais un copier/coller de tout ça dans EXCEL et basta !

Depuis que je suis en 2005, le comportement est différent puisque j'ai systématiquement 'NULL' dans mes résultats et le même 'NULL' à l'arrivée dans EXCEL. J'ai essayé de faire un chercher/remplacer sous EXCEL mais le nombre trop important de données fait que ça n'aboutit pas (idem sous Notepad++) !

Je cherche à revenir au comportement de 2000 sur ce cas de figure. Y-a-t-il une simple option pour y parvenir (si oui, laquelle ?) ou suis-je condamné à revoir l'écriture de la requête (de la mort) pour virer mes 'NULL' à l'arrivée?

Merci de votre aide !!
Et avec le module d'export de SSMS?
__________________
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
Vieux 17/05/2011, 17h11   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
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 668
Points : 8 718
Points : 8 718
Citation:
Envoyé par iberserk
Et avec le module d'export de SSMS?
L'idée est bonne mais l'outil n'est pas d'une fiabilité extraordinaire.
A tester

@++
__________________
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 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h59.


 
 
 
 
Partenaires

Hébergement Web