Un problema che pensavo di aver risolto....

venerdì 23 aprile 2010 - 17.31

mauri1961 Profilo | Senior Member

Ho un file .csv che acquisisco in una tabella di un database sqlserver 2008. Una prima volta dopo alcuni travagliati giorni, sono riuscito ad acquisire i dati attraverso questa query:

BULK INSERT WEB_PUBB
FROM 'C:\ACUCBL31\FILES\WEB\WBREGI.CSV'
WITH(
DATAFILETYPE='char',
FIELDTERMINATOR=';',

FIRSTROW=2

);

Il tutto funzionava perfettamente....

Ora un secondo file con le medesime caratteristiche sottoposto ad acquisizione mi segnala questo messaggio:

Messaggio 4864, livello 16, stato 1, riga 4
Errore di conversione (non corrispondenza di tipo o carattere non valido per la tabella codici specificata) dei dati durante il caricamento bulk. Riga 2, colonna 3 (data_pratica).

Come si può notare il campo del quale non trova carattere valido è una data che nel file è definita gg/mm/aaaa e nella tabella è definita "date".

Se provo a cambiare la definizione del campo in tabella mettendo ad esempio "char(10)" l'acquisizione funziona ma mi crea il problema ancora peggiore che nella mia bella pagina asp.net la ricerca per data non funziona più.

Nel primo passaggio infatti dopo l'acquisizione mi trovavo la data visualizzata in aaaa-mm-gg.

Ad essere onesti non vorrei in prima battuta aver cambiato qualche definizione manualmente ma sinceramente non ricordo.

Esiste la possibilità e se si come, di acquisire tale campo in maniera corretta e definitiva?
Grazie, Maurizio

lbenaglia Profilo | Guru

>Messaggio 4864, livello 16, stato 1, riga 4
>Errore di conversione (non corrispondenza di tipo o carattere
>non valido per la tabella codici specificata) dei dati durante
>il caricamento bulk. Riga 2, colonna 3 (data_pratica).
>
>Come si può notare il campo del quale non trova carattere valido
>è una data che nel file è definita gg/mm/aaaa e nella tabella
>è definita "date".

Ciao Maurizio,

Probabilmente la lingua di default associata alla login utilizzata per aprire la connessione che esegue la BULK INSERT non è l'italiano (probabile che sia l'inglese), quindi fallisce il cast da stringa a date.

Per risolvere il problema puoi:

1) Impostare l'italiano come lingua di default della login;
2) Eseguire il comando SET LANGUAGE italiano; prima lanciare la BULK INSERT.

>Nel primo passaggio infatti dopo l'acquisizione mi trovavo la
>data visualizzata in aaaa-mm-gg.
Questo è un formato universalmente riconosciuto che è indipendente dalla lingua di default associata alla login.

>Ad essere onesti non vorrei in prima battuta aver cambiato qualche
>definizione manualmente ma sinceramente non ricordo.


>Grazie, Maurizio
Prego.

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

mauri1961 Profilo | Senior Member

Ho provato ad inserire il set language italiano ma il risultato non cambia.

Mi chiedevo se potrebbe essere una soluzione inserire una convert date in modo da convertire il campo da gg/mm/aaaa in aaaa-mm-gg ma devo inserirla all'interno della bulk insert ? Sto cercando su internet le soluzioni ma non sono molto chiare....

Grazie, Maurizio

lbenaglia Profilo | Guru

>Ho provato ad inserire il set language italiano ma il risultato
>non cambia.
Posta un csv di esempio ed il comando CREATE TABLE in modo da riprodurre l'importazione.

>Mi chiedevo se potrebbe essere una soluzione inserire una convert
>date in modo da convertire il campo da gg/mm/aaaa in aaaa-mm-gg
>ma devo inserirla all'interno della bulk insert ?
No, non è possibile eseguire alcun cast esplicito in un comando BULK.

>Grazie
Prego.

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

mauri1961 Profilo | Senior Member

ecco il codice con la create table e in allegato un esempio del file .csv.

Come noterai solo due date sono definite con date altre sono definite char(10) ma non le utilizzo.

USE CASSAWEB




GO

set language italiano

create table web_pubb(
protocollo nvarchar(15) null,
cip numeric(14,0) null,
data_pratica date null,
tipo_pratica numeric(3,0) null,
Descrizione_TipoPratica nvarchar(max) null,
data_regolarita char(10) null,
is_subappalto bit null,
tipo_richiedente bit null ,
cf_committente nvarchar(max) null,
nome_committente nvarchar(max) null ,
cap_committente nvarchar(max) null ,
comune_committente nvarchar(max) null,
pr_committente nvarchar(2) null,
indirizzo_committente nvarchar(max) null,
descrizione_cantiere nvarchar(max) null,
cap_cantiere nvarchar(5) null,
comune_cantiere nvarchar(max) null,
pr_cantiere nvarchar(2) null,
indirizzo_cantiere nvarchar(max) null,
protocollo_appalto nvarchar(max) null,
data_appalto char(10) null,
tipo_appalto nvarchar(50) null,
data_inizio_lavori char(10) null,
data_fine_lavori char(10) null,
data_inizio_sospensione char(10) null,
data_fine_sospensione char(10) null,
importo_lavori numeric(18,2) null,
percentuale_manodopera numeric(3,0) null,
percentuale_subappalto numeric(3,0) null,
cf_appaltatore nvarchar(16) null,
nome_appaltatore nvarchar(max) null,
cap_appaltatore nchar(5) null,
comune_appaltatore nvarchar(50) null,
pr_appaltatore nvarchar(2) null ,
indirizzo_appaltatore nvarchar(max) null,
cf_subappaltatore nvarchar(16) null ,
nome_subappaltatore nvarchar(max) null,
cap_subappaltatore nchar(5) null,
comune_subappaltatore nvarchar(max) null,
pr_subappaltatore nvarchar(2) null,
indirizzo_subappaltatore nvarchar(max) null,
regolare_inps bit null,
regolare_inail bit null,
regolare_ce bit null,
data_durc date null,
specifica_oggetto nvarchar(50) null ,
Nome_ImpresaEsecutrice nvarchar(max) null ,
Cf_ImpresaEsecutrice nvarchar(16) null
)


BULK INSERT WEB_PUBB
FROM 'C:\ACUCBL31\FILES\WEB\WBREGI.CSV'
WITH(
DATAFILETYPE='char',
FIELDTERMINATOR=';',

FIRSTROW=2

);

GO

Grazie, Maurizio
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