Importare un file xls in Sql 2000

lunedì 21 aprile 2008 - 16.34

bluland Profilo | Guru

Salve,

ho la necessita' di pulire vari files xls, per questo avevo pensato di importare i files in tabelle tabella Sql 2000 e poi di lavorarci attraverso SP e magari in seguito creare un applicativo che gestisca il tutto.

Ora il primo passo sara' l'importazione voi cosa mi consigliate? anche in prospettiva di automazione?
Ho provato a creare un DTS ma ricevo il seguente errore:
"Error Source: Microsoft Data Transformation Services (DTS) Data Pump
Error Description:Data for source column 10 ('Fault Description') is too large for the specified buffer size."


Consigli?

Saluti
--------------------
Vincenzo PESANTE
System Engineer

alx_81 Profilo | Guru

>Salve,
Ciao!

>
>ho la necessita' di pulire vari files xls, per questo avevo pensato
>di importare i files in tabelle tabella Sql 2000 e poi di lavorarci
>attraverso SP e magari in seguito creare un applicativo che gestisca
>il tutto.
>Ora il primo passo sara' l'importazione voi cosa mi consigliate?
>anche in prospettiva di automazione?
>Ho provato a creare un DTS ma ricevo il seguente errore:
>"Error Source: Microsoft Data Transformation Services (DTS) Data
>Pump
>Error Description:Data for source column 10 ('Fault Description')
>is too large for the specified buffer size."
Questo errore dovresti riceverlo a causa della lunghezza di un particolare campo del tuo excel. DTS stima le prime n righe (pochissime) per calcolare la lunghezza e il tipo di dato dei campi che stai importando. Di conseguenza se per le prime n posizioni non hai il campo alla massima lunghezza, il motore di DTS sbaglia l'analisi e non riesce a riservare lo spazio necessario al campo di tipo testo su excel (se non erro prima dei 255 mette varchar, mentre se supera i 255 caratteri diventa un text). Un possibile workaround è fare la query sul foglio excel, ordinando per la lunghezza del campo che ti dà problemi, descending. In modo che nella prima riga avrai comunque il valore più lungo per quel campo. In tal caso DTS non sbaglierà.
una cosa tipo:

SELECT ['Foglio1$'].* FROM ['Foglio1$'] ORDER BY LEN('Foglio1$FaultDescription') DESC

In alternativa, puoi controllare nella Disconnected edit sulle proprietà del file, dovrebbe esserci la dimensione da fissare per il metadato.

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

bluland Profilo | Guru

ok ora prova,

sto cercando di provare sul pc di casa ma ricevo il seguente errore quando creo i DTS:


Errore source: Microsoft JET database engine
Error description: la tabella esterna non e nel formato previsto


eppure è lo stesso file.....


bah!
--------------------
Vincenzo PESANTE
System Engineer

bluland Profilo | Guru


>Questo errore dovresti riceverlo a causa della lunghezza di un
>particolare campo del tuo excel. DTS stima le prime n righe (pochissime)
>per calcolare la lunghezza e il tipo di dato dei campi che stai
>importando. Di conseguenza se per le prime n posizioni non hai
>il campo alla massima lunghezza, il motore di DTS sbaglia l'analisi
>e non riesce a riservare lo spazio necessario al campo di tipo
>testo su excel (se non erro prima dei 255 mette varchar, mentre
>se supera i 255 caratteri diventa un text). Un possibile workaround
>è fare la query sul foglio excel, ordinando per la lunghezza
>del campo che ti dà problemi, descending. In modo che nella prima
>riga avrai comunque il valore più lungo per quel campo. In tal
>caso DTS non sbaglierà.
>una cosa tipo:
>
>
>SELECT
> ['Foglio1$'].*
>FROM
> ['Foglio1$']
>ORDER BY
> LEN('Foglio1$FaultDescription') DESC
>

Scusamin non ho mai lavorato con i file excel, come faccio a connettermi sul file per effettuare la query?
Ho provato cosi:
SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')

ma ricevo errore:
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' reported an error. The provider did not give any information about the error.
OLE DB error trace [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005:

forse non ci sono i driver sul server.


>
>In alternativa, puoi controllare nella Disconnected edit sulle
>proprietà del file, dovrebbe esserci la dimensione da fissare
>per il metadato.
Ho provato a cambiare il campo in ntext ma a questo punto ricevo l'errore:

To continue, define transformations. You can make changes to the default transformations.

anche se dopo l'ok lo ritrovo come ntext, e cmq ricevo nell'esecuzione l'error

:Data for source column 10 ('Fault Description') is too large for the specified buffer size.

boh!
Idee?

Potrei anche valutare soluzini alternative non so, fare tutto tramite applicativo, magari trasformare in quealche modo il file xls in xml o altro qualsiasi soluzione e' ben accetta!

Ciao




>
>Alx81 =)
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi
>http://italy.mvps.org

--------------------
Vincenzo PESANTE
System Engineer

alx_81 Profilo | Guru

>Idee?
Prova a fare l'import wizard e poi a salvare il DTS..

Sinceramente ho fatto tante importazioni di quel tipo e non ho mai riscontrato problemi del genere.
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

bluland Profilo | Guru

Forse ho trovato il problema,

prima di effettuare l'import ho fatto un clean dei caratteri non stampabili sulla colonna che dava problemi e cosi sembra funzioni,

solo che vorrei automatizzare anche questo,

a questo punto sto pensando di fare tutto lato applicativo, cioe' lavorare sul file excel con applicativo .net, magari potrei registrare nell'applicativo le macro, e poi darlo in pasto al dts gia pulito... che ne pensi?
--------------------
Vincenzo PESANTE
System Engineer

alx_81 Profilo | Guru

>a questo punto sto pensando di fare tutto lato applicativo, cioe'
>lavorare sul file excel con applicativo .net, magari potrei registrare
>nell'applicativo le macro, e poi darlo in pasto al dts gia pulito...
>che ne pensi?
Se è necessario pulirlo prima, sei costretto a mettere un software di mezzo che faccia la pulizia.
Quindi se non hai possibilità di fartelo arrivare pulito, devi intervenire prima..
Perciò scegli pure tu come farlo
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5