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 13/12/2011, 18h00   #1
Invité de passage
 
Inscription : avril 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 3
Points : 0
Points : 0
Par défaut real et decimal, soucis de sortie avec "," et "."

Bonsoir, voilà un bout de code à coller dans management studio :
Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE test
(
col1 real,
col2 decimal(10,3)
)
 
INSERT INTO test (col1, col2) VALUES (123.65,56983.256)
 
SELECT * FROM test 
 
DROP TABLE test
La sortie donne un nombre avec une virgule pour le real (avec sa virgule flottante) et un nombre avec un point pour le decimal (avec sa virgule fixe).
Et ce indépendamment des paramètres régionaux de ma machine ou de mon server (du Win Server 2008 R2 enterprise (paramétré en Français) avec du Sql Serveur 2008).
Pour info dans le Sql Server 2000, les deux donnent des points.

Sauriez vous pourquoi j'ai ce soucis ?
et pourquoi c'est comme ça par défaut ?
Et s'il y a un moyen de régulariser ça pour avoir soit un point soit une virgule ?

C'est gênant car dans la BD sur laquelle je travail, j'ai du real et du numeric(x,y).
De plus, en envoyant tout ça dans une commande en query par Bcp, le bousin me fait un convert auto en varchar par dessus et je me retrouve toujours avec des extractions avec des points au lieu des virgule quelque soit la valeur (, ou .) dans les paramètres régionaux des deux OS (client ou serveur).

nb : L'utilisation du collate (avec la culture française) sur la requête ou sur chaque colonne de la requête ne change rien.
nb : J'ai testé sans succès les fichiers de format avec BCP pour réaliser l'extraction sans conversion auto avec les types de mon choix, mais vu que ma vrai requête fait des jointures sur une dizaine de tables et que je ne souhaite pas en faire une vue (et de toute façon, ça rend encore moins bien qu'avec la conversion auto de bcp), ça n'est pas applicable.
uluquiorra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h39   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
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 959
Points : 17 791
Points : 17 791
C'est un bug lié à l'IHM SSMS... A faire remonter au support via CONNECT si ce n'est pas déjà fait...

Je l'ai déjà rencontré dans mes présentations et en particulier hier en faisant une démo devant 100 personnes chez MS !!! (SQL Server days....)

Pourriez vous me donner votre version de SQL Server avec la commande :
SELECT @@VERSION
et celui de SSMS avec le menu "Aide / A propos de" et utiliser le copier coller pour nous fournir les versions des outils clients.

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 14/12/2011, 11h12   #3
Invité de passage
 
Inscription : avril 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 3
Points : 0
Points : 0
Bonjour, voilà les infos :

SELECT @@VERSION :
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Infos SSMS :
Microsoft SQL Server Management Studio 10.0.1600.22 ((SQL_PreRelease).080709-1414 )
Outils clients Microsoft Analysis Services 2007.0100.1600.022 ((SQL_PreRelease).080709-1414 )
Microsoft Data Access Components (MDAC) 6.1.7601.17514 (win7sp1_rtm.101119-1850)
Microsoft MSXML 3.0 4.0 5.0 6.0
Microsoft Internet Explorer 8.0.7601.17514
Microsoft .NET Framework 2.0.50727.5448
Système d'exploitation 6.1.7601

Le serveur surlequel tourne SQL Server 2008 est un Windows Server 2008 R2 Entreprise avec le Pack 1.

Et la version de BCP est la suivante :

ps : Au niveau de BCP, connaissez vous un moyen pour qu'il exporte les données de type decimal ou real avec une virgule au lieu d'un point (lors de sa conversion auto en varchar) dans le fichier d'extraction ?


Merci d'avance.
uluquiorra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h41   #4
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Citation:
Envoyé par uluquiorra Voir le message
Bonjour, voilà les infos :
ps : Au niveau de BCP, connaissez vous un moyen pour qu'il exporte les données de type decimal ou real avec une virgule au lieu d'un point (lors de sa conversion auto en varchar) dans le fichier d'extraction ?
Merci d'avance.
une méthode de contournement : utilisation de la fonction REPLACE

--> Pour avoir des virgules partout
Code :
SELECT REPLACE(cast(col1 AS numeric(10,3)),'.',',') col1, REPLACE(cast(col2 AS numeric(10,3)),'.',',')col2 FROM maBase.dbo.test
--> Pour avoir des points partout
Code :
SELECT REPLACE(cast(col1 AS numeric(10,3)),',','.') col1, REPLACE(cast(col2 AS numeric(10,3)),',','.')col2 FROM maBase.dbo.test
--> Pour bcp
Code :
bcp "SELECT replace(cast(col1 as numeric(10,3)),'.',','), replace(cast(col2 as numeric(10,3)),'.',',') FROM maBase.dbo.test" QUERYOUT "C:\testbcp.txt" -c -S "InstanceServeurSQL" -T
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti 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 04h39.


 
 
 
 
Partenaires

Hébergement Web