Problema di formato della data utilizzando SSIS per Excel in SQL Server
-
20-08-2019 - |
Domanda
Sto cercando di importare una colonna di date da un foglio di calcolo in Excel 2003 in SQL Server 2005 utilizzando SSIS. Sono nel Regno Unito, quindi voglio le date formattate come gg / MM / aaaa.
Sfortunatamente, la colonna nel foglio di calcolo contiene una combinazione di date memorizzate come stringhe in gg / MM / aaaa (con formattazione 'Generale' di Excel) e date usando la formattazione 'Data' di Excel gg / MM / aaaa (con impostazioni locali 'Inglese Regno Unito)').
È così e non posso aspettarmi che gli utenti siano in grado di risolvere da soli.
Quando si guarda il foglio di calcolo, tutte le date appaiono visivamente corrette, ad es. gg / MM / aaaa.
Sto cercando di importare i valori in una colonna varchar in una tabella di mantenimento nel database. Quindi eseguo una procedura memorizzata che copia questi valori nella tabella corretta che contiene una colonna datetime.
Il problema è che le date archiviate nel foglio di calcolo e utilizzano la formattazione della data vengono importate come MM / gg / aaaa in SQL Server e le date memorizzate come stringhe vengono importate come gg / MM / aaaa. Ho IMEX = 1 nella stringa di connessione.
Avere date che usano entrambi i formati nella stessa colonna varchar sta ovviamente causando un problema quando provo a inserirlo in una colonna datetime, quindi
SET DATEFORMAT MDY;
SET DATEFORMAT DMY;
non servono.
Qualcuno sa perché il pacchetto SSIS dovrebbe importare le date apparentemente corrette nel foglio di calcolo Excel in SQL Server come MM / gg / aaaa comunque?
Esiste un modo per forzare il pacchetto SSIS a importare le date come gg / MM / aaaa che funzioneranno con questa combinazione di date come stringhe e celle con la formattazione della data applicata?
Altre idee ?!
Mille grazie,
Anthony
Soluzione
Penso che tu abbia risposto alla tua domanda. L'importazione di celle formattate per data viene considerata come una data e altre come una stringa. Forse l'impostazione della data del server SQL è MM / gg / aaaa e quindi la conversione.
Perché non provi ad aggiungere un passaggio di conversione dei dati nel tuo pacchetto SSIS e converti tutto nella colonna in un unico formato: datetime o stringa. Quindi sono sicuro che SQL Server gestirà tutti allo stesso modo.
Raj
Altri suggerimenti
Ciò che ha funzionato per me è stato aggiungere IMEX = 1
alla stringa di connessione di Excel.
Quindi sarà simile a questo:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder1\Book1.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";