Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Date Doit être comprise entre le 01/01/1753 00:00:00 et le 31/12/9999 23:59:59 Erreur de débordement SqlBulkCopy

Eh bien, MS Access représente son datetime type de données en tant que double :

  • L'époque (point zéro) du calendrier MS est 30 December 1899 00:00:00
  • La partie entière du double est le décalage en jours par rapport à l'époque, et
  • La partie fractionnaire du double est la partie fractionnaire de la journée.

Selon la spécification, le domaine de la partie date d'un MS Access datetime est

  • limite inférieure :1 January 100
  • limite supérieure :31 December 9999

Et puisque le domaine d'un SQL Server datetime est :

  • limite inférieure :1 January 1753
  • limite supérieure :31 December 9999

toutes les dates de votre base de données MS Access antérieures au 1er janvier 1753 causeront des problèmes. Vous devez trouver les fausses données et les corriger. Quelques approches :

  • Dans votre base de données d'accès, créez une vue/requête pour présenter les données sous une forme acceptable pour SQL Server. Ensuite, chargez en masse à partir de cela dans SQL Server.

  • Souvent, comme il est à peu près acquis que vos données source sont sales/corrompues, lors du chargement en bloc de données dans SQL Server, on charge en masse les données source dans une table de travail où toutes les colonnes sont nullables, de type varchar types et qui n'a pas de contraintes/clés. Une fois cela fait, exécutez une procédure stockée qui effectue le nettoyage et le massage nécessaires des données avant de les déplacer vers leur emplacement d'origine.