Importazione CSV basata su SQL Server
1) I dati del file CSV possono avere ,
(virgola) nel mezzo (Es:descrizione), quindi come posso effettuare l'importazione gestendo questi dati?
Soluzione
Se stai usando ,
(virgola) come delimitatore, non c'è modo di distinguere tra una virgola come terminatore di campo e una virgola nei dati. Userei un FIELDTERMINATOR
diverso come ||
. Il codice sarebbe simile e questo gestirà perfettamente la virgola e la barra singola.
2) Se il client crea il csv da excel allora i dati che hanno virgola sono racchiusi all'interno di " ... "
(virgolette doppie) [come l'esempio seguente] quindi come può gestirlo l'importazione?
Soluzione
Se stai usando l'inserimento BULK, non c'è modo di gestire le virgolette doppie, i dati verranno inseriti con virgolette doppie nelle righe. Dopo aver inserito i dati nella tabella, puoi sostituire quelle virgolette doppie con ' '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Come possiamo monitorare se alcune righe hanno dati errati, quali import ignora? (l'importazione ignora le righe che non sono importabili)?
Soluzione
Per gestire le righe che non vengono caricate nella tabella a causa di dati o formati non validi, è possibile gestire utilizzando la proprietà ERRORFILE, specificare il nome del file di errore, scriverà l'errore di visualizzazione delle righe nel file di errore. il codice dovrebbe assomigliare.
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)