2009-11-09 33 views
9

Tôi có một datatable với records.I'm chèn bản ghi vào Sql bảng bằng cách sử dụng SqlBulkCopy.It hoạt động fine.Next thời gian khi nhận được datatable với cùng một hồ sơ với vài thay đổi giá trị SqlBulkCopy được chèn khác thiết lập các bản ghi mà không cần cập nhật các chi tiết trước đây. Làm thế nào tôi có thể cập nhật bảng Sql bằng cách sử dụng SqlBulkCopy ?? Hãy giúp tôi.Sử dụng SQLBulkCopy để Chèn/Cập nhật cơ sở dữ liệu

Cảm ơn, Vix

Trả lời

15

SqlBulkCopy chỉ được sử dụng để chèn hồ sơ, không cập nhật như được giải thích here. Bạn sẽ cần sử dụng một kỹ thuật khác để thực hiện cập nhật hàng loạt.

ví dụ: bạn có thể SqlBulkCopy vào một bảng dàn dựng, sau đó chạy một số SQL để cập nhật từ đó vào bảng chính.

+0

+1 cho bảng dàn dựng, đó chính xác là cách bạn phải cập nhật với chèn hàng loạt và số lượng cập nhật lớn trên cùng một bảng, rất đáng để thực hiện. –

3

Cắt ngắn bảng và thực hiện Bulkcopy.

+0

cho vix: Cắt ngắn sau đó tải số lượng lớn là quá trình hiệu quả nhất nếu bạn chỉ muốn bảng kết quả chỉ chứa các bản ghi tải hàng loạt. - upvoted – Chad

+0

Tốt cho một số tình huống đơn giản, nhưng điều này sẽ là một nỗi đau thực sự nếu bất kỳ mức độ phức tạp nào trong dữ liệu bạn đang cập nhật. Việc duy trì tính toàn vẹn dữ liệu của bạn có thể rất khó tùy thuộc vào từng chi tiết của ứng dụng/DB. ví dụ. Các mối quan hệ FK cần phải được giữ lại. – MemeDeveloper

2

Tránh bảng cắt ngắn và tạo bảng tạm thời mới, BTW sẽ tiêu thụ nhiều không gian và bộ nhớ hơn.

Tôi đã tạo Trình kích hoạt bằng INSTEAD OF INSERT và sử dụng bên trong câu lệnh MERGE.

Nhưng đừng quên thêm tham số SqlBulkCopyOptions.FireTriggers vào SqlBulkCopy.

Đây là hai xu của tôi.

-1

Giống như được đề cập bởi AdaTheDev, SqlBulkCopy chỉ có thể chèn tuy nhiên có một thư viện thay thế cho phép thực hiện các thao tác Upsert.

Disclaimer: Tôi là chủ sở hữu của dự án Bulk Operations

Thư viện Thao tác hàng loạt có một phương pháp "BulkMerge" mà Chèn hoặc Cập nhật hàng dựa trên phím định.

var bulk = new BulkOperation(connection); 

bulk.ColumnMappings.Add("ID", true); 
bulk.ColumnMappings.Add("Column1"); 
bulk.ColumnMappings.Add("Column2"); 
bulk.ColumnMappings.Add("Column3"); 

bulk.BulkMerge(dt); 
Các vấn đề liên quan