IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Mystere dans un cast


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut Mystere dans un cast
    Bonjour à tous !

    Je m'interroge sur le petit mystere suivant :
    j'ai une colonne de type nvarchar. Elle contient dans une ligne la valeur :
    "Certificate status : 5 ZIG contract number : E434137 Tot.Nb employees : Nb of sites : 3 Audit scope : Fremstilling og salg af katalysatorer."
    Quand je cast cette valeur en varbinary(2000), j'obtiens la chaîne :
    0x43 0065 0072 0074 0069 0066 0069 0063 0061 0074 0065 0020 0073 0074 0061 0074 0075 0073 0020 003A 0020 0035 000D 000A 005A 0049 0047 0020 0063 006F 006E 0074 0072 0061 0063 0074 0020 006E 0075 006D 0062 0065 0072 0020 003A 0020 0045 0034 0033 0034 0031 0033 0037 000D 000A 0054 006F 0074 002E 004E 0062 0020 0065 006D 00

    Mais quand je reconverti ma chaîne dans l'autre sens, je trouve :
    "Certificate status : 5 ZIG contract number : E434137 Tot.Nb em"

    Pourquoi ? Où est passé la fin de ma chaîne ? est-une simple limitation d'affichage ? mon varbinary serait trop long et seule une partie est affichée ?
    J'imagine que c'est ca, mais dans ce cas comment faire pour tout afficher ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Vérifie la taille du nvarchar que tu as affecté pour ton opération de conversion.
    Je pense que la taille doit être inférieure au nombre de cazractères initiaux.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    C'est à dire ?

    je fais juste un SELECT cast(MaColonne as varbinary(2000)) FROM MaTable WHERE MaCondition
    Je devrais passer par une variable intermédiaire pour lui donner une taille plus importante que celle allouée par défaut ? c'est ca ?

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    varbinary(2000) = 2000 octets
    nvarchar(2000) = 4000 octets

    nvarchar, c'est de l'unicode. Un caractère est codé sur deux octets

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par nox75 Voir le message
    Mais quand je reconverti ma chaîne dans l'autre sens, je trouve :
    "Certificate status : 5 ZIG contract number : E434137 Tot.Nb em"
    Pour reconvertir ton champ varbinary, qelle est l'instruction que tu exécute ? Je pense que tu dois faire l'inverse de :

    SELECT cast(MaColonne as varbinary(2000)) FROM MaTable WHERE MaCondition
    Si dans la définition de ton type, la longueur de ton champ est trop petit, tu n'auras pas tout tes caractères.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Ben tout ce que j'ai trouvé c'est de concaténer les nchar() sur chaque caractere '-_-
    Peut-être qu'il y a plus pratique.

    Mais donc en fait ma démarche est la suivante :
    -Je prends ma chaîne varbinary, je la passe dans une macro excel
    -La macro excel me formate ma chaîne pour avoir des nchar(0x..)+nchar(0x..) etc...
    -je fais un select de ma sortie excel.

    rudib : merci ! mais pourtant si je cast en varbinary(8000) j'ai toujours le meme probleme : /
    Pourquoi ?

    EDIT : bon ba fallait juste modifier les propriétés maximum characters per column du Query Analyser en fait ''-_-

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertion dans un CAST
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/06/2012, 23h40
  2. type de données non valide dans un cast
    Par psyka dans le forum PL/SQL
    Réponses: 3
    Dernier message: 05/03/2009, 11h05
  3. [TSQL] Probleme de cast dans un case
    Par grandnico dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/09/2006, 10h57
  4. Utilisation de cast dans de l'héritage
    Par dreamanoir dans le forum C++
    Réponses: 4
    Dernier message: 21/02/2005, 21h01
  5. cast dans un template
    Par olivic dans le forum Langage
    Réponses: 15
    Dernier message: 20/10/2004, 14h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo