Unicode e BULK INSERT

martedì 14 febbraio 2012 - 02.13
Tag Elenco Tags  SQL Server 2005  |  Access (.mdb)  |  Office 2007

CorriCorrado Profilo | Junior Member

Ciao,
dovendo uploadare da txt uso una procedura BULK INSERT, ma ho problemi con i caratteri UNICODE.
Un esempio: - invece di Ä.

BULK INSERT #tempBusinessUnits FROM 'U:\BU_List.txt' WITH (FIRSTROW = 2, FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n', DATAFILETYPE ='widechar')
La tabella è:

CREATE TABLE #tempBusinessUnits ([Bua_BuCode] varchar(5), [Bua_BuType] varchar(3), [Bua_BuaNo] varchar(3), [Bua_AddrType] nchar(50), [Bua_FreeTxt] ntext, [Bua_Street] nchar(50), [Bua_ZipCode] nchar(50), [Bua_CityName] nchar(50), [Bua_CtyCode] nchar(50), [Bua_TrzCode] nchar(50), [Bua_StateName] nchar(50), [Bua_Name] nchar(50), [Bua_NameAdd] nchar(50))

Grazie per l'aiuto
Corrado

lbenaglia Profilo | Guru

>dovendo uploadare da txt uso una procedura BULK INSERT, ma ho
>problemi con i caratteri UNICODE.

Ciao Corrado,

Il file 'U:\BU_List.txt' è in formato ASCII o UNICODE?
Nel primo caso puoi omettere il parametro DATAFILETYPE dato che il default è "char", altrimenti zippa e allega il file che ti crea problemi che proviamo a darci un'occhiata.

>Grazie per l'aiuto
Prego.

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

CorriCorrado Profilo | Junior Member

Ciao Lorenzo,
grazie dell'aiuto; se già con SQL sono una frana, con i formati txt sono anche peggio: c'è un modo per capire in quale formato sia?
E' un testo orginato da una vecchissima versione di BO (business object), la 5.1.7... non commentare grazie :D

Poterei usare una tattica e crearla nella versione più consona all'import in sql.


Corrado

lbenaglia Profilo | Guru

>grazie dell'aiuto; se già con SQL sono una frana, con i formati
>txt sono anche peggio: c'è un modo per capire in quale formato
>sia?

Ciao Corrado,

Apri il file con Notepad, File > Save As e guarda cosa riporta la combo Encoding.

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

CorriCorrado Profilo | Junior Member

Ciao,
riporta ANSI. A questo punto che cosa devo usare? WIDENATIVE?
Devo per caso anche cambiare il tipo di dati da nchar ad altro?

Grazie mille
Corrado

lbenaglia Profilo | Guru

>riporta ANSI.
Allora il file non è in formato UNICODE

>A questo punto che cosa devo usare? WIDENATIVE?
Ometti DATAFILETYPE

>Devo per caso anche cambiare il tipo di dati da nchar ad altro?
Prima di tutto bisogna capire perché hai definito la maggior parte delle colonne come nchar(50) quando dal nome delle colonne mi sembra strano che gli indirizzi del mondo siano tutti lunghi esattamente 50 caratteri

Come ho già scritto, posta un esempio di file che proviamo a darci un'occhiata.

>Grazie mille
Prego.

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

CorriCorrado Profilo | Junior Member

Lorenzo,
ciò che mi hai detto mi ha illuminato: prima ho cambiato in varchar(50), che leggendo dovrebbe essere migliore rispetto il nvarchar.
Secondo, ho tolto il datafiletype e inserito CODEPAGE = 'raw'.
Apparentemente dovrebbe essere tutto a posto, nel senso che i caratteri sono codificati come in originale.

In allegato cmq trovi un'estrazione del file.

Ciao e grazie dell'aiuto.

PS certo che ne avrei veramente tante di cose da imparare...
Corrado
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5