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

Développement SQL Server Discussion :

Comversion Implcite Non attendue


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut Comversion Implcite Non attendue
    Bonjour,
    J'utilise une variable varchar(), qui ne contient que des chiffres (pas de lettres ni espace ni aucun autre caractère)

    quand elle contient une seqence de chiffres composant un numero supérieur à la val max de bigint, (9223372036854775807), l'alimentation plante !!!

    Hypothèse que je me susi mise: une conversion implicite en bigint est faite,


    problème : pourquoi et comment remedier à ça?


    merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Si la colonne cible est de type INT ou plus petit, c'est normal.
    Sinon CASTez le BIGINT en VARCHAR avant insertion ...

    @++

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Merci elsuket,

    ça m'embête de faire la conversion à chaque fois, je cherche donc à savoir la raison pour laquelle sqlServer fait la conversion

    Merci d'avance

  4. #4
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut La conversion implicite est à la demande du code/de l'utilisateur
    Bonjour,

    SQL serveur ne fait pas de conversion 'tout seul', il essaye de se débrouiller.

    Par exemple bout de code TSQL suivant pose problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @sz varchar(50)
    set @sz = '9223372036854775807'
    print @sz - 1
    Msg*248, Niveau*16, État*1, Ligne*3
    La conversion de la valeur varchar '9223372036854775807' a dépassé une colonne int.
    On demande à Sql Serveur d'afficher une représentation textuelle
    de l'expression suivante: @sz - 1

    Or @sz est une chaîne et 1 est initialement non "non typé" puis convertit en int par sql serveur.

    Quand il faut calculer, ça explose car sql assume
    une expression du type int - int.

    Le bout de code TSQL suivant fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @sz varchar(50)
    set @sz = '9223372036854775807'
    print @sz - cast(1 as bigint)
    Il doit donc y avoir quleque choses dans votre base qui pousse sql à convertir ce varchar en int.

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    merci agemis31,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @sz varchar(50)
    SET @sz = '9223372036854775807'
    print @sz - cast(1 AS bigint)
    ===> ça marche

    et en changeant le '2' (2ieme position de la gauche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @sz varchar(50)
    SET @sz = '9923372036854775807'
    print @sz - cast(1 AS bigint)
    ça marche pas
    !!!!!!!!!!!!!!!!!!

  6. #6
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut Eh oui
    Eh oui,

    Avec 9223372036854775807, on est déjà au maximum de la valeur positive d'un bigint

Discussions similaires

  1. Résultat non attendu de l'opérateur Like
    Par idrysse31 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/03/2010, 13h01
  2. résultat d'un update non attendu
    Par the_frogkiller dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/07/2009, 11h43
  3. Identificateur,chaine ou nombre non attendu
    Par jmich dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2008, 18h43
  4. Réponses: 2
    Dernier message: 04/01/2008, 17h41
  5. comportement non attendu avec memcpy
    Par berg dans le forum C
    Réponses: 15
    Dernier message: 23/07/2006, 00h56

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