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
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因