Nhập CSV dựa trên SQL Server
1) Dữ liệu tệp CSV có thể có
,
(dấu phẩy) ở giữa (Ví dụ:mô tả), vậy làm cách nào để thực hiện nhập xử lý những dữ liệu này?
Giải pháp
Nếu bạn đang sử dụng ,
(dấu phẩy) làm dấu phân cách, thì không có cách nào để phân biệt giữa dấu phẩy làm dấu chấm cuối trường và dấu phẩy trong dữ liệu của bạn. Tôi sẽ sử dụng một FIELDTERMINATOR
khác như ||
. Mã sẽ trông giống như vậy và điều này sẽ xử lý hoàn hảo dấu phẩy và dấu gạch chéo.
2) Nếu khách hàng tạo csv từ excel thì dữ liệu của hascomma được bao gồm trong
" ... "
(dấu ngoặc kép) [như ví dụ bên dưới], vậy làm cách nào để quá trình nhập có thể xử lý điều này?
Giải pháp
Nếu bạn đang sử dụng BULK insert thì không có cách nào để xử lý dấu ngoặc kép, dữ liệu sẽ được chèn thêm dấu ngoặc kép vào các hàng. Sau khi chèn dữ liệu vào bảng, bạn có thể thay thế các dấu ngoặc kép đó bằng ' '.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Làm cách nào để theo dõi nếu một số hàng có dữ liệu không hợp lệ, quá trình nhập nào bỏ qua? (Nhập có bỏ qua các hàng không thể nhập)?
Giải pháp
Để xử lý các hàng không được tải vào bảng do dữ liệu hoặc định dạng không hợp lệ, có thể hoạt động bằng cách sử dụng thuộc tính ERRORFILE, hãy chỉ định tên tệp lỗi, nó sẽ ghi lỗi chia hàng vào tệp lỗi. mã sẽ trông như thế nào.
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
)