2 votes

Débordements du champ DATETIME d'Oracle à SQL2005 dans SSIS

J'importe des données d'Oracle vers SQL Server 2005 à l'aide de SSIS. Je pense que les champs datetime d'Oracle sont stockés avec une précision supérieure à celle que les champs "DATETIME" de SQL Server 2005 autorisent, ce qui provoque des erreurs de débordement. Quelle est la meilleure pratique pour obtenir la table ?

Ces tables ont beaucoup de champs de date, et il y a beaucoup de tables, donc ce serait génial s'il n'y avait pas une tonne de travail manuel pour chaque champ...

J'ai lu https://stackoverflow.com/questions/2231028/dealing-with-timestamp-datetime-when-copying-data-from-oracle-to-sql-server-using et cela pourrait fonctionner, mais je devrais le faire pour chaque champ, pour chaque table, et je préférerais avoir un paramètre ou un processus universel...

Des idées ?

3voto

William Salzman Points 4155

Le problème est que SQL Server est limité dans ses dates de validité (du 1er janvier 1753 au 31 décembre 9999), alors qu'Oracle utilise des dates allant du 1er janvier 4712 avant notre ère au 31 décembre 9999. Ainsi, toute date dans Oracle inférieure au 1er janvier 1753 dépassera le type de données datetime de SQL Server.

Si vous passez à Sql 2008, vous pouvez utiliser le type Datetime2 pour résoudre ce problème, car ce type de date est valide de 0001-01-01 à 9999-12-31.

Voir les détails ici : Types de date et d'heure de Sql Server

Et ici : Type de date Oracle

3voto

Leo Points 31

Je vous suggère d'utiliser l'instruction suivante dans votre déclaration SELECT :

CASE WHEN date_birth < TO_DATE('01-01-1753','DD-MM-YYYY') THEN NULL
ELSE to_char(date_birth, 'YYYY-MM-DD HH24:MI:SS') END AS date_birth

2voto

Richard B Points 1106

Il y a une autre cause. Vérifiez que les dates sont valables. Nous sommes au milieu de ce problème, et nous avons des années spécifiées comme quelque chose comme 5096, qui ne peuvent apparemment pas être déplacées vers le serveur SQL... il en va de même si vous avez une année de 0207 au lieu de 2007.

0voto

Peter Points 514

Je signale simplement qu'il s'agit d'une "réponse" puisqu'il semble qu'il n'y ait pas de réglage global.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X