2008-12-16 32 views
13

我正在使用具有有限權限的數據庫用戶,將C#方法中的ADO.NET 2.0 SqlBulkCopy對象批量插入到MS SQL 2005數據庫中。當我嘗試運行該操作時,收到錯誤消息:SqlBulkInsert - 如何設置觸發器,檢查約束?

批量複製失敗。用戶沒有 表 'theTable'上的ALTER TABLE權限。 ALTER TABLE 權限是必需上批量複製操作 的 目標表,如果該表具有觸發器或檢查約束 ,但指定 作爲選項來批量複製 命令'FIRE_TRIGGERS''CHECK_CONSTRAINTS'散裝提示不是。

我看了一些資料,並與讓我指定這樣的事情的構造函數創建批量複製對象:

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

但這不會改變任何東西 - 我像以前一樣得到同樣的錯誤消息。我試着擺弄一些其他的SqlBulkCopyOptions值,但沒有運氣。我真的認爲這會解決問題,我錯過了什麼?

我在對用戶授予表上的ALTER之後測試了該過程,並且操作成功。然而,這不適合我的情況。只有

回答

22

解決了!看起來我需要對旗幟枚舉進行復習。當我對它們進行「或」運算時,我對這些枚舉值進行了逐位加和運算。

SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints 

計算結果爲零(其等同於SqlBulkCopyOptions.Default。)

SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints 

工作正常,並使其大容量插入來完成。

+0

公平的電話。哎呀! – gbn 2008-12-17 14:33:08

2

可能性,對不起

SQL文檔BULK INSERT指定3箱子在需要ALTER TABLE。你列出了其中2個。即使不需要,KeepIdentity選項是否被設置?

另一種選擇是表格上的觸發器已被禁用,導致問題混淆。使用ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL確保啓用。

+0

感謝您的提示gbn,我在嘗試之前就明白了答案(如下所示)。 – 2008-12-17 14:28:43