我正在使用具有有限权限的数据库用户将 ADO.NET 2.0 SqlBulkCopy 对象从 C# 方法批量插入到 MS SQL 2005 数据库中。当我尝试运行该操作时,我收到错误消息:
Bulk copy failed. User does not have ALTER TABLE permission on table 'theTable'. ALTER TABLE permission is required on the target table of a bulk copy operation if the table has triggers or check constraints, but
'FIRE_TRIGGERS'
or'CHECK_CONSTRAINTS'
bulk hints are not specified as options to the bulk copy command.
我阅读了一些文档并使用构造函数创建了批量复制对象,让我指定这些内容:
SqlBulkCopy bc = new SqlBulkCopy(
System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);
但这并没有改变任何东西 - 我收到与以前相同的错误消息。我尝试摆弄其他一些 SqlBulkCopyOptions 值,但没有运气。我真的认为这可以解决问题,我错过了什么吗?
在将表上的 ALTER 授予我的用户后,我测试了该过程,并且操作成功。但是,这不是我的情况的选择。
最佳答案
解决了!看起来我需要复习一下标志枚举。当我应该对它们进行 ORing 时,我对 enum 值进行了按位 AND 运算。
SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints
计算结果为零(相当于 SqlBulkCopyOptions.Default。)
SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints
工作正常并允许批量插入完成。
关于sql-server-2005 - SqlBulkInsert - 如何设置火灾触发器,检查约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373057/