15

Tôi đang tìm một cách nhanh chóng và bẩn để nhập tệp CSV vào SQL Server mà không phải tạo bảng trước và xác định các cột của nó.Cách tạo và điền bảng trong một bước như một phần của thao tác nhập CSV?

Mỗi CSV được nhập sẽ được nhập vào bảng của riêng nó.

Chúng tôi không quan tâm đến hội thảo kiểu dữ liệu. CSV khác nhau về cấu trúc và bố cục, và tất cả chúng đều có nhiều cột, nhưng chúng tôi chỉ quan tâm đến một vài cột: địa chỉ đường phố và mã zip. Chúng tôi chỉ muốn đưa dữ liệu CSV vào cơ sở dữ liệu SQL một cách nhanh chóng và trích xuất các cột có liên quan.

Tôi muốn cung cấp FieldTerminator và RowTerminator, trỏ nó vào CSV và có tiện ích thực hiện phần còn lại. Có cách nào để tạo bảng và điền vào nó, tất cả trong một bước, bằng cách sử dụng BULK INSERT và/hoặc OpenRowset (SỐ LƯỢNG LỚN ...)?

+0

gì phiên bản của SQL Server? –

+0

Sql Server 2000 – Tim

Trả lời

11

Referencing SQLServerPedia, tôi nghĩ rằng điều này sẽ làm việc:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

select TerritoryID 
     ,TotalSales 
     ,TotalCost 
INTO CSVImportTable 
from openrowset('MSDASQL' 
       ,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}' 
       ,'select * from C:\csvtest.CSV') 
+0

Cảm ơn bạn. Tôi đã phải sử dụng Microsoft Text Driver thay vì Microsoft Access Text Driver, nhưng nhập khẩu đã làm việc. Tuy nhiên tôi đã nhận được thông báo lỗi này (mặc dù quá trình nhập đã hoạt động mặc dù nó): Msg 15123, Cấp 16, Tiểu bang 1, Thủ tục sp_configure, Dòng 79 Tùy chọn cấu hình 'Truy vấn phân phối quảng cáo' không tồn tại hoặc nó có thể là nâng cao Tùy chọn. – Tim

+0

Bạn phải chạy 'RECONFIGURE' cho các tùy chọn nâng cao trước khi bạn có thể cấu hình tùy chọn đặc biệt. Sẽ có một GO khác sau RECONFIGURE đầu tiên. Tôi sẽ chỉnh sửa lại. – TyT

5

Annoying, tôi không có điểm đại diện chưa chỉ bình luận, vì vậy tôi sẽ thêm một câu trả lời dựa trên TYT của (xử lý trông khủng khiếp trong sở hữu, btw ...)

Mã công nhân cần một dấu "\" thay vì một lần cho tôi để tránh lỗi "không tìm thấy tệp". Và bạn không phải chỉ định các trường; chúng sẽ được suy ra từ hàng đầu tiên của tệp:

select * 
into CsvImportTable 
from openrowset(
      'MSDASQL', 
      'Driver={Microsoft Access Text Driver (*.txt, *.csv)}', 
      'select * from C:\\csvtestfile.csv') 

Tôi không gặp vấn đề với trình điều khiển truy cập.

CẬP NHẬT: Nếu bạn gặp sự cố với các loại được suy luận không chính xác, hãy chèn một vài hàng ở đầu tệp với dữ liệu của loại bạn muốn trong bảng để bạn nhận được văn bản -> VARCHAR thay vì văn bản- > INT và sau đó xóa các hàng sau khi nhập.

Khi đóng băng cuối cùng, thêm một PK để bàn, do đó bạn có thể thao tác dữ liệu - xóa các hàng giả, vv:

alter table CsvImportTable add Id int identity(1, 1) 
+1

Để biết giá trị của nó là gì, hãy thêm chi tiết vào tiểu sử của bạn. Điểm đại diện của bạn tăng lên. –

Các vấn đề liên quan