Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SSIS 2005 : Pb chargement d'un champ DT_NUMERIC

5 réponses
Avatar
izme75000
Bonjour,
J'ai un package SSIS qui plante syst=E9matiquement lors du chargement
d'une table depuis un fichier plat de longueur fixe :

[Destination OLE DB [324]] Erreur*: =AB*Une erreur OLE DB s'est
produite. Code d'erreur*: 0x80004005. Un enregistrement OLE DB est
disponible. Source*: =AB*Microsoft SQL Native Client*=BB Hresult*:
0x80004005 Description*: =AB*Valeur de caract=E8re non valide pour la
sp=E9cification de la casse*=BB. *=BB

[Destination OLE DB [324]] Erreur*: =AB*Une erreur s'est produite avec
colonne d'entr=E9e =AB*Colonne 6*=BB (378) sur entr=E9e =AB*Entr=E9e de
destination OLE DB*=BB (337). =C9tat de colonne retourn=E9*: =AB*La
conversion a =E9chou=E9 car la valeur des donn=E9es a d=E9pass=E9 les
capacit=E9s du type sp=E9cifi=E9.*=BB. *=BB[/i]

En entr=E9e, j'ai un champ de 5 chiffres, TAUX_TVA_ACHAT qui doit etre
transf=E9r=E9 dans une table ou ce champ est d=E9clar=E9 comme
DT_NUMERIC(5,2).
Est ce que vous auriez une piste de r=E9flexion sachant que les donn=E9es
sources sont bien numeriques sur les 5 positions ?

Merci d'avance

5 réponses

Avatar
Romelard Fabrice [MVP]
Bonsoir,

Regardez l'explication pour le CAST, ici :
- http://msdn2.microsoft.com/fr-fr/library/ms141704.aspx

Cela vous donnera peut être la solution.

--
Cordialement.

Romelard Fabrice [MVP]

"izme75000" a écrit dans le message de news:

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 sachant que les données
sources sont bien numeriques sur les 5 positions ?

Merci d'avance
Avatar
izme75000
Ca n'a pas résolu mon problème, que je vais reprendre depuis le
début :
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...
Merci d'avance



Romelard Fabrice [MVP] a écrit :

Bonsoir,

Regardez l'explication pour le CAST, ici :
- http://msdn2.microsoft.com/fr-fr/library/ms141704.aspx

Cela vous donnera peut être la solution.

--
Cordialement.

Romelard Fabrice [MVP]

"izme75000" a écrit dans le message de news:

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 sachant que les données
sources sont bien numeriques sur les 5 positions ?

Merci d'avance


Avatar
Rudi Bruchez
izme75000 a écrit:

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...



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).

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
izme75000
Exact.
Ce qui me parait bizarre, c'est que lorsque je déclare le champ en
entrée en DT_NUMERIC(5,2), il ne place pas tout seul la virgule !
Tous ceux qui font des chargements de datawarehouses à partir de
fichiers de longueurs fixes doivent diviser chaque champ par 100 pour
retrouver leurs décimales ? Ca me parait lourd et fastidieux non ?



Rudi Bruchez a écrit :

izme75000 a écrit:

> 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...

Bonjour,

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

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/


Avatar
Rudi Bruchez
izme75000 a écrit:

Ce qui me parait bizarre, c'est que lorsque je déclare le champ en
entrée en DT_NUMERIC(5,2), il ne place pas tout seul la virgule !
Tous ceux qui font des chargements de datawarehouses à partir de
fichiers de longueurs fixes doivent diviser chaque champ par 100 pour
retrouver leurs décimales ? Ca me parait lourd et fastidieux non ?



A ma connaissance SSIS n'automatise pas ça. Comment pourrait-il décider
tout seul que les deux derniers digits représentent les décimales ?

Au pire, tu as la possibilité de développer une tâche qui fait cette
transformation de colonne toute seule, et de la donner à la communauté :)

--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/