2010-03-05 7 views
0

J'étais sur le point d'importer des données d'une table MySQL vers SQL SErver 2008 via SSIS. Mais je ne peux pas transférer en raison de dates dans le tableau. Il y a quelques données de type de données datetime, comme '0001-01-10' qui ne supporte pas dans SQL Server où les années se situent entre 1753 et 9999. Alors, comment puis-je résoudre ce problème dans les requêtes MySQL?Date Problème de conversion

Répondre

1

Si ces dates sont des données valides, il n'y a pas de moyen facile de gérer cela dans SqlServer. Fondamentalement, un gestionnaire de date personnalisé est nécessaire. Une approximation assez bonne pourrait être obtenue en séparant l'année en un seul champ entier et en plaçant le mois et le jour dans un champ de date avec une année constante. Chaque comparaison serait alors composée.

Plus probable - pour la plupart des applications professionnelles - ces dates sont inutiles et doivent être nettoyées ou remplacées par des valeurs NULL.

0

Notez que aucun des types de données SSIS sont vraiment équivalent à SQL Server datetime ou types smalldatetime, avec leur gamme restreinte de dates admissibles.

Beaucoup de documentation en ligne suggère le DT_DBTIMESTAMP est équivalent à datetime SQL . Ceci n'est vrai que jusqu'à un certain point. Les dates en dehors de la plage datetime seront heureusement converties en DT_DBTIMESTAMP (ou n'importe quel type de date SSIS) - mais généreront une erreur si vous essayez de les écrire dans une colonne SQL datetime.

Embrouillant, SSIS représente datetime colonnes SQL externes comme DT_DBTIMESTAMP, ce qui suggère que datetime et DT_DBTIMESTAMP sont équivalents, lorsqu'ils ne sont pas. Cela signifie que vous ne pouvez pas anticiper les problèmes de date hors de portée dans SSIS en les diffusant. Si vous allez éventuellement écrire à datetime ou smalldatetime colonnes, vous devez faire une vérification explicite que la date n'est pas hors de portée (< 1/1/1753, ou 1/1/1900 pour smalldatetime) .