Nguyên nhân sự cố là do nhà cung cấp Oledb
Khi nhập tệp csv hoặc tệp excel có cột kiểu dữ liệu hỗn hợp, cột này sẽ thay thế các kiểu không thống trị bằng null
. ( Sử dụng Oledb hoặc Ace.Oledb )
Giải pháp thay thế
Bạn có thể thực hiện một số cách giải quyết bằng cách thêm một hàng đầu tiên có chứa các giá trị chuỗi, sau đó xóa hàng đó sau khi hoàn tất quá trình xâm nhập
ID,A,B,C
0,a,a,a
1,12,hh,i
2,ab12,tt,b
3,2,aa,o
4,bc12,ee,l
Và nó sẽ khắc phục sự cố nếu sử dụng IMEX=1
Thao tác này sẽ đọc các cột dưới dạng chuỗi và cột ID dưới dạng số. (0 được sử dụng)
Hoặc thêm HDR=NO
thuộc tính thành chuỗi kết nối để tiêu đề là dòng đầu tiên được nhập (tất cả các giá trị của nó là chuỗi)
Đọc thêm về các kiểu dữ liệu hỗn hợp trong bài viết
Các phương pháp khác
Hoặc cố gắng đạt được điều này mà không cần nhà cung cấp aceoledb, chỉ cần nhập tệp csv theo cách khác như sau:
Sử dụng Trình điều khiển Văn bản của Microsoft
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv')
Sử dụng BULK INSERT
CREATE TABLE dbo.MyTable
(ID INTEGER,
A VARCHAR(50),
B VARCHAR(50),
C VARCHAR(50)
)
BULK INSERT dbo.MyTable
FROM 'C:\abc.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Các chi tiết khác trong các bài viết này:
- Làm cách nào để nhập tệp csv bằng OPENROWSET?
- T-SQL - Đọc tệp CSV bằng OpenRowSet (Hướng dẫn chi tiết)