BULK IMPORT con record a lunghezza variabile

giovedì 24 gennaio 2008 - 11.04

gmt Profilo | Junior Member

Salve,
ho una domanda da fare.. parliamo di SQL Server 2000/2005.. ho un file di testo da importare centinaia di migliaia di righe.. ho creato il file del formato per l'importazine con la BULK..
Il problema sta nel file da importare, nel fatto che gli ultimi campi (una ventina di formato testo) non sono valorizzati, quindi alcuni record (molti) hanno una lunghezza piu' corta..
E' possibile 'dire' alla BULK tramite il file di formato che se non trova valori alla fine deve mettere il valore predefinito del campo in tabella o NULL o quello che gli pare ?
Oppure mi devo ripassare il file di testo e 'allungare' i record tutti alla stessa lunghezza ?

Grazie in anticipo

lbenaglia Profilo | Guru

>E' possibile 'dire' alla BULK tramite il file di formato che
>se non trova valori alla fine deve mettere il valore predefinito
>del campo in tabella o NULL o quello che gli pare ?
No.
La lunghezza del tracciato record deve essere necessariamente identica per tutte le righe.
Possono esistere campi non valorizzati, ma il loro numero deve essere costante.

>Grazie in anticipo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gmt Profilo | Junior Member

Non ti ringrazio perchè non era la rispostache volevo eh eh, scherzo..
Sono 300 Mb di file.. devo farmi un programmino che se lo legge e riscrive aggiungendo spazi alla fine..
Uff...
Grazie !
Ciao

lbenaglia Profilo | Guru

>Sono 300 Mb di file.. devo farmi un programmino che se lo legge
>e riscrive aggiungendo spazi alla fine..
>Uff...
Più che spazi, il numero di colonne deve essere lo stesso per tutte le righe.
La lunghezza delle colonne non è significativa.

>Grazie !
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gmt Profilo | Junior Member

Si certo.. gli ultimi 10 campi sono 10 campi char(1).. a volte non valorizzati ma senza neanche un valore..
quindi la riga risulta piu' corta..
Parliamo di una banca.. figurati.. se l'export me lo faceva un ragazzino tanto lo avrebbe previsto..
Poveri i nostri soldi nei C/C..

Ciao

lbenaglia Profilo | Guru

>Si certo.. gli ultimi 10 campi sono 10 campi char(1).. a volte
>non valorizzati ma senza neanche un valore..
>quindi la riga risulta piu' corta..

Dipende, supponendo che il separatore di colonna sia il ";" è sufficiente che ci siano 10 ";":

col1;col2;;;;;;;;;;;

>Parliamo di una banca.. figurati.. se l'export me lo faceva un
>ragazzino tanto lo avrebbe previsto..
>Poveri i nostri soldi nei C/C..
Ho lavorato alcuni anni in ambito bancario e so bene come funzionano certe cose

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gmt Profilo | Junior Member

No è posizionale senza separatori..
Ora ho questo problema... sepro che S. Benaglia mi aiuti..
All'interno del flusso dati da importare ho ad esempio:

GIUSEPPE0155ANTONIO

I primi 8 caratteri sono il cognome..
poi 4 caratteri un valore
Poi il nome

Nel file format ho messo

1 SQLCHAR 1 8 "" 1 cognome Latin1_General_CI_AS
2 SQLCHAR 1 4 "" 2 valore Latin1_General_CI_AS
3 SQLCHAR 1 8 "" 3 nome Latin1_General_CI_AS
...

in realtà il campo valore è un numeric(3,1) perciò nella tabella devo avere 15,5..
Io mi ritrovo 155..
Come posso fare?

Sto impazzendo..
Grazie

lbenaglia Profilo | Guru

>No è posizionale senza separatori..
Allora se le colonne sono a lunghezza fissa occorre che le righe abbiano esattamente la stessa lughezza.

>in realtà il campo valore è un numeric(3,1) perciò nella tabella
>devo avere 15,5..
>Io mi ritrovo 155..
>Come posso fare?
Puoi fare ben poco.
Se la colonna è numeric(3,1) e tu vuoi valorizzarla con 155 otterrai una bella eccezione di overflow.
Se nel file sorgente non hai il punto come separatore decimale, SQL Server non se lo può inventare.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gmt Profilo | Junior Member

infatti sone le esportazioni dei sistemi del cavolo. Infatti mi sono fatto un programma in .NET che si passa il file.. lo allunga e mette i punti..

Raga! Controllate bene i vostri C/C !!
Ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5