Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lỗi nhập bằng Openrowset

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Tác động đến hiệu suất của Luôn được mã hóa

  2. Hàm tổng hợp MIN và MAX trong SQL Server

  3. Nhận tất cả các ngày giữa hai ngày trong SQL Server

  4. Cách sửa đổi thời gian lưu giữ dữ liệu thu thập dữ liệu thay đổi (CDC) trong SQL Server - Hướng dẫn sử dụng SQL Server

  5. SQL Agent Job - Run As danh sách thả xuống trống