SqlBulkInsert - 如何設置Fire觸發器,檢查約束?

ado.net sqlbulkcopy sql-server-2005

我正在使用具有有限權限的數據庫用戶,使用C#方法將ADO.NET 2.0 SqlBulkCopy對象批量插入到MS SQL 2005數據庫中。當我嘗試運行該操作時,我收到錯誤消息:

批量複製失敗。用戶對錶'theTable'沒有ALTER TABLE權限。如果表具有觸發器或檢查約束,則批量複製操作的目標表上需要ALTER TABLE權限,但未將'FIRE_TRIGGERS''CHECK_CONSTRAINTS'批量提示指定為批量複製命令的選項。

我閱讀了一些文檔並使用構造函數創建了批量複製對象,該構造函數允許我指定這樣的東西:

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

但這並沒有改變任何東西 - 我得到了和以前一樣的錯誤信息。我嘗試擺弄其他一些SqlBulkCopyOptions值,但沒有運氣。我真的以為這會解決問題,我錯過了什麼嗎?

我在表上向用戶授予ALTER後測試了該過程,操作成功。但是,這不適合我的情況。

一般承認的答案

解決了!看起來我需要復習標誌枚舉。當我應該對它們進行ORing時,我對枚舉值進行了按位。

SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints

計算結果為零(相當於SqlBulkCopyOptions.Default。)

SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints

正確工作並允許批量插入完成。


熱門答案

可能性,對不起

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

另一個選擇是桌面上的觸發器已經被禁用,這使問題混亂。使用ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL確保啟用。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow