Daugiau
CSV failo importavimas į SQL serverį
Ieškau pagalbos, kaip importuoti .csv
failą į SQL serverį naudojant BULK INSERT
ir turiu keletą pagrindinių klausimų.
Aplinkybės:
-
CSV failo duomenyse tarp jų gali būti
,
(kablelis) (pvz.: aprašymas), todėl kaip importuoti šiuos duomenis? -
Jei klientas sukuria CSV failą iš "Excel", tuomet duomenys, kuriuose yra kablelis, yra uždaromi į
""
(dvigubas kabutes) [kaip toliau pateiktame pavyzdyje], tad kaip importuoti? -
Kaip sekti, ar kai kuriose eilutėse yra blogų duomenų, kuriuos importas praleidžia? (ar importas praleidžia eilutes, kurių negalima importuoti)?
Čia pateikiamas CSV pavyzdys su antraštėmis:
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
Ir importuoti skirtas SQL sakinys:
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
TABLOCK
)
168
3
SQL serverio CSV importas
Sprendimas
Jei kaip skirtuką naudojate
,
(kablelį), tuomet nėra jokio būdo atskirti kablelį kaip lauko terminatorių nuo kablelio jūsų duomenyse. Aš naudočiau kitąPOLO TERMINATORIŲ
, pavyzdžiui,||
. Kodas atrodytų taip, ir tai puikiai tvarkys kablelį ir vieną pasvirąjį brūkšnį.Sprendimas
Jei naudojate BULK insert, tuomet nėra jokio būdo tvarkyti dvigubas kabutes, duomenys bus į eilutes bus įterpiami su dvigubomis kabutėmis. Įterpę duomenis į lentelę, galite pakeisti šias dvigubas kabutes žodžiais '` `'.
Sprendimas
Tvarkyti eilutes, kurios neįkeliamos į lentelę dėl neteisingų duomenų ar formato, galima taip tvarkyti naudojant savybę ERRORFILE, nurodykite klaidų failo pavadinimą, jis įrašys eilutes kodas turėtų atrodyti taip.
Geriausias, greičiausias ir paprasčiausias būdas išspręsti kablelio problemą duomenyse - naudoti "Excel" ir išsaugoti kableliu atskirtą failą, nustačius "Windows" sąrašo skirtuko parametrą, kuris nėra kablelis (pvz., vamzdelis). Taip bus sukurtas vamzdžiu (ar bet kaip kitaip) atskirtas failas, kurį galėsite importuoti. Tai aprašyta čia.
Pirmiausia reikia importuoti CSV failą į duomenų lentelę
Tada galite įterpti daug eilučių naudodami SQLBulkCopy