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 :

[SSIS 2005] Pb chargement d'un champ DT_NUMERIC


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut [SSIS 2005] Pb chargement d'un champ DT_NUMERIC
    Bonjour,
    J'ai un package SSIS qui plante systématiquement lors du chargement d'une table depuis un fichier plat de longueur fixe :


    [Destination OLE DB [324]] Erreur*: «*Une erreur OLE DB s'est produite. Code d'erreur*: 0x80004005. Un enregistrement OLE DB est disponible. Source*: «*Microsoft SQL Native Client*» Hresult*: 0x80004005 Description*: «*Valeur de caractère non valide pour la spécification de la casse*». *»

    [Destination OLE DB [324]] Erreur*: «*Une erreur s'est produite avec colonne d'entrée «*Colonne 6*» (378) sur entrée «*Entrée de destination OLE DB*» (337). État de colonne retourné*: «*La conversion a échoué car la valeur des données a dépassé les capacités du type spécifié.*». *»[/I]

    En entrée, j'ai un champ de 5 chiffres, TAUX_TVA_ACHAT qui doit etre transféré dans une table ou ce champ est déclaré comme DT_NUMERIC(5,2).
    Est ce que vous auriez une piste de réflexion ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    En fait, quand vous déclarez un numeric(5,2), cela signifie que le nombre maximal qui peut être insérer dans ce champs est 999.99

    Exemple :

    use tempdb
    go
    create table t(i numeric(5,2))
    go
    insert into t values(1.02)--Pas de problème
    go
    insert into t values(999.99)--Pas de problème
    go
    --Tentative de dépassement de capacité
    insert into t values(9999.99)--Erreur, instruction arrêté
    go
    insert into t values(999.999)--Erreur, instruction arrêté
    go
    Bref, vous devez vous rassurez que le nombre de chiffre (partie entière + partie décimale doit être = p, ou p désigne la précision)

    A plus.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    J'ai bien un chiffre sur 5 positions : dans mon fichier plat, j'ai un champ qui contient un taux TVA stocké sur 5 positions (ex: 01960). Je voudrais charger cette valeur dans un champ de type NNN,NN.
    Quel est la meilleure solution dans IS pour faire cela ? Ca me parait
    pourtant trivial...

  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,

    Si j'ai bien compris ton problème, ce dont tu as besoin est de l'opération de transformation "derived column" (colonne dérivée), dans le data flow, qui te permet d'appliquer une opération sur une colonne pour la transformer (diviser par 100, éventuellement convertir explicitement).

    P.S: vive le cross-posting !

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Hé bien, dans ce cas précis, vous avez :

    create table t(i as numeric(5))
    go
    insert into t values(88888);
    go

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Non car j'aurai dans mon champ 88888 et non 888,88
    sauf si j'ai raté quelque chose !

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous avez deux problèmes distincts :
    1- La définition de la taille des champs pour prendre des valeurs de la forme MMM.MM !
    2- La division par 100 de la valeur avant leur insertion !

    Et le type numeric(5,2) résoud le problème lié à la conversion pas autre chose.
    Pour la transformation , vous devez fouiller.
    Merci.

Discussions similaires

  1. Problème MS SQL Server Agent et SSIS 2005.
    Par AA_27 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 23/03/2010, 13h16
  2. [SQL SERVER 2005 EXPRESS] Chargement de données
    Par fguigui dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/08/2007, 09h28
  3. [PHP-JS] Chargement automatique des champs
    Par Emir83 dans le forum Langage
    Réponses: 15
    Dernier message: 21/03/2007, 17h34
  4. [Sql Server 2005] Question a propos des champs unicode
    Par siaoly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2006, 15h00
  5. [Delphi 2005/Oracle/ADO]Taille de champ incorrecte
    Par Frank dans le forum Bases de données
    Réponses: 20
    Dernier message: 15/04/2005, 14h12

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