sql-server-2005 - SqlBulkInsert - 如何设置火灾触发器,检查约束?

标签 sql-server-2005 ado.net sqlbulkcopy

我正在使用具有有限权限的数据库用户将 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/

相关文章:

c# - 更新内存数据表中的单元格

c# - 使用 SqlCommand.ExecuteScalar() 从序列中选择在高磁盘使用率时返回 NULL

postgresql - 如何调试 Postgres 复制命令失败

sql-server - SQL Server 重新播种标识列的替代方案

sql - 按顺序使用 asc 和 desc 变量

java - 在 SQL 上插入数据

c# - SQL 连接错误 - C#

c# - 异步批量复制

php - 无法通过 PHP 连接到 msSQL 数据库

.net - 在 SQL Server 2005 中存储图像和文档的数据类型