Baserad SQL Server CSV-import
1) CSV-filens data kan ha
,
(komma) emellan (Ex:beskrivning), så hur kan jag få import att hantera dessa data?
Lösning
Om du använder ,
(komma) som avgränsare, så finns det inget sätt att skilja mellan kommatecken som fältavslutning och kommatecken i din data. Jag skulle använda en annan FIELDTERMINATOR
som ||
. Koden skulle se ut och detta kommer att hantera kommatecken och enstaka snedstreck perfekt.
2) Om klienten skapar csv från excel så är data som har komma omslutna i
" ... "
(dubbla citattecken) [som exemplet nedan] så hur kan importen hantera detta?
Lösning
Om du använder BULK infogning finns det inget sätt att hantera dubbla citattecken, data kommer att infogas med dubbla citattecken i rader. efter att ha infogat data i tabellen kan du ersätta dessa dubbla citattecken med ' '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Hur spårar vi om vissa rader har dålig data, vilken import hoppar över? (hoppar import över rader som inte är importerbara)?
Lösning
För att hantera rader som inte laddas in i tabellen på grund av ogiltiga data eller format, skulle kunna behandlas med ERRORFILE-egenskapen, ange felfilnamnet, det kommer att skriva radshavingsfelet till felfilen. koden ska se ut.
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
)