Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Data Deve essere compresa tra 1/1/1753 00:00:00 e 31/12/9999 23:59:59 Errore di overflow SqlBulkCopy

Bene, MS Access rappresenta il suo datetime tipo di dati come double :

  • L'epoca (punto zero) del calendario MS è 30 December 1899 00:00:00
  • La parte intera del double è l'offset in giorni dall'epoca, e
  • La parte frazionaria del double è la parte frazionaria del giorno.

Secondo la specifica, il dominio della parte della data di un datetime di MS Access è

  • limite inferiore:1 January 100
  • limite superiore:31 December 9999

E poiché il dominio di un SQL Server datetime è:

  • limite inferiore:1 January 1753
  • limite superiore:31 December 9999

qualsiasi data nel database di MS Access precedente al 1 gennaio 1753 causerà problemi. Devi trovare i dati fasulli e risolverli. Un paio di approcci:

  • Nel database di accesso, crea una vista/query per presentare i dati in una forma accettabile per SQL Server. Quindi, carica in blocco da quello in SQL Server.

  • Spesso, poiché è praticamente una conclusione scontata che i dati di origine siano sporchi/corrotti, durante il caricamento in blocco dei dati in SQL Server, si caricheranno in blocco i dati di origine in una tabella di lavoro in cui tutte le colonne sono annullabili, di tipo varchar tipi e che non ha vincoli/chiavi. Una volta fatto, esegui una procedura memorizzata che esegue la pulizia e il massaggio necessari dei dati prima di spostarli nella loro sede corretta.