2008-12-16 37 views
13

Tôi đang thực hiện chèn hàng loạt với đối tượng ADO.NET 2.0 SqlBulkCopy từ phương thức C# vào cơ sở dữ liệu MS SQL 2005, sử dụng người dùng cơ sở dữ liệu với quyền hạn chế. Khi tôi cố gắng chạy chiến dịch, tôi nhận được thông báo lỗi:SqlBulkInsert - Làm thế nào để thiết lập kích hoạt cháy, kiểm tra ràng buộc?

Sao chép không thành công. Người dùng không có quyền số ALTER TABLE trên bảng 'theTable'. ALTER TABLE phép được yêu cầu trên bảng mục tiêu của một hoạt động sao chép số lượng lớn nếu bảng có trình kích hoạt hoặc kiểm tra trở ngại, nhưng 'FIRE_TRIGGERS' hoặc 'CHECK_CONSTRAINTS' gợi ý số lượng lớn không quy định như tùy chọn với số lượng lớn bản sao lệnh.

Tôi đọc một số tài liệu và tạo ra các đối tượng sao chép số lượng lớn với các nhà xây dựng cho phép tôi xác định những thứ như:

SqlBulkCopy bc = new SqlBulkCopy(
     System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"], 
     SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints); 

Nhưng điều này không thay đổi bất cứ điều gì - Tôi nhận được thông báo lỗi tương tự như trước đây. Tôi đã thử không quan trọng với một số giá trị SqlBulkCopyOptions khác nhưng không may mắn. Tôi thực sự nghĩ rằng điều này sẽ khắc phục được vấn đề, tôi có thiếu gì đó không?

Tôi đã thử nghiệm quy trình sau khi cấp ALTER trên bảng cho người dùng của tôi và hoạt động đã thành công. Tuy nhiên đây không phải là một lựa chọn cho tình hình của tôi.

Trả lời

22

Giải quyết! Có vẻ như tôi cần bồi dưỡng về các lá cờ. Tôi đã bitwise ANDing các giá trị enum khi tôi nên có ORing chúng.

SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints 

đánh giá bằng không (tương đương với SqlBulkCopyOptions.Default.)

SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints 

Làm việc một cách chính xác và cho phép chèn số lượng lớn để hoàn thành.

+0

Cuộc gọi công bằng. Rất tiếc! – gbn

+1

Tôi không biết các tùy chọn này đã tồn tại nhưng một số tìm kiếm sáng tạo đã đưa tôi đến đây. Giải quyết vấn đề của tôi với SqlBulkCopy vào một bảng với trình kích hoạt * mà không cần phải cung cấp quyền truy cập SQL ALTER TABLE của tôi! – madannes

2

khả năng duy nhất, tôi xin lỗi tài liệu SQL

cho BULK INSERT quy định cụ thể 3 trường hợp ALTER TABLE là cần thiết. Bạn đã liệt kê 2 người trong số họ. Tùy chọn KeepIdentity có được đặt, ngay cả khi không cần thiết?

Một tùy chọn khác là trình kích hoạt trên bảng đã bị vô hiệu hóa, gây nhầm lẫn vấn đề. Sử dụng ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL để đảm bảo được bật.

+0

Cảm ơn các mẹo gbn, tôi đã thử chúng trước khi tôi nhận ra câu trả lời (xem bên dưới.) –

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