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

È stato utile?

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";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top