Tôi đang cố gắng đổ một tập dữ liệu rất lớn từ tệp .csv vào cơ sở dữ liệu SQL Server 2012. Thay vì làm hàng ngàn INSERT, tôi đang điều tra bcp
.BCP không trả về lỗi nào, nhưng cũng không sao chép bất kỳ hàng nào
CHỈNH SỬA: Đây là quy trình tự động và không chỉ là một lần duy nhất. Tôi cũng không có quyền BULK INSERT
đối với cơ sở dữ liệu này.
Khi tôi cố gắng sao chép dữ liệu vào cơ sở dữ liệu, bcp
không trả về bất kỳ lỗi nào, nhưng cũng không thực sự sao chép bất kỳ lỗi nào - nó chỉ trả lại 0 rows copied
. Tôi đã cắt giảm điều này xuống một trường hợp tối thiểu không hoạt động.
Đầu tiên, tạo một bảng đơn giản với hai cột:
CREATE TABLE [dbo].[mincase](
[key] [varchar](36) NOT NULL,
[number] [int] NOT NULL
PRIMARY KEY CLUSTERED
(
[key] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 40) ON [PRIMARY]
) ON [PRIMARY]
GO
Sau đó, sử bcp
để tạo ra một tập tin định dạng từ này. Lưu ý rằng ví dụ này tạo ra một tệp định dạng XML, nhưng nó không quan trọng cho dù đó là XML hay bản địa cho việc này.
bcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS
Bây giờ, tạo tệp data.csv với một hàng và hai mục, được phân cách bằng tab. Trong trường hợp của tôi, các tập tin chỉ đơn giản là:
somecharacters 12345
Một lần nữa, đó là một tab, không phải là hai không gian, và nó dường như không quan trọng cho dù có trailing dòng mới hay không.
Bây giờ cố gắng sử dụng bcp
với tập tin định dạng để chèn dữ liệu từ tập tin này:
bcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS
Thay vì sao chép dữ liệu vào cơ sở dữ liệu, tôi có được điều này:
Starting copy...
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 1
Có ai biết những gì đang xảy ra ở đây?
Cảm ơn!
bạn đã thử tùy chọn DỮ LIỆU NHẬP KHẨU chưa? –