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

Sql server 2005 SqlBulkInsert-如何设置火灾触发器、检查约束?,sql-server-2005,ado.net,sqlbulkcopy,Sql Server 2005,Ado.net,Sqlbulkcopy,我正在使用具有有限权限的数据库用户,使用ADO.NET 2.0 SqlBulkCopy对象从C#方法向MS SQL 2005数据库执行大容量插入。当我尝试运行该操作时,会收到错误消息: 批量复制失败。用户没有 表上的ALTER TABLE权限 “表格”。改变 上需要表权限 大容量复制操作的目标表 如果表中有触发器或检查 约束,但'FIRE\u触发器'或 “检查约束”批量提示不可用 指定为批量复制的选项 指挥部 我阅读了一些文档,并使用构造函数创建了bulk copy对象,该构造函数允许我指定以下

我正在使用具有有限权限的数据库用户,使用ADO.NET 2.0 SqlBulkCopy对象从C#方法向MS SQL 2005数据库执行大容量插入。当我尝试运行该操作时,会收到错误消息:

批量复制失败。用户没有 表上的ALTER TABLE权限 “表格”。改变 上需要表权限 大容量复制操作的目标表 如果表中有触发器或检查 约束,但
'FIRE\u触发器'
“检查约束”
批量提示不可用 指定为批量复制的选项 指挥部

我阅读了一些文档,并使用构造函数创建了bulk copy对象,该构造函数允许我指定以下内容:

    SqlBulkCopy bc = new SqlBulkCopy(
        System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
        SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);
但这并没有改变任何事情——我收到了与以前相同的错误消息。我试图摆弄其他一些SqlBulkCopyOptions值,但运气不佳。我真的以为这会解决问题,我是不是遗漏了什么


在向用户授予表上的ALTER后,我测试了该过程,操作成功。但是,这不是我的选择。

很抱歉,这只是可能

的SQL文档指定了需要ALTER TABLE的3种情况。您列出了其中的两个。是否设置了KeepIdentity选项(即使不需要)


另一个选项是表上的触发器已经被禁用,这会混淆问题。使用
ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL
确保启用。

解决了它!看来我需要一个关于标志枚举的复习。我本应该对枚举值进行位和运算的,但我对它们进行了位和运算

SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints
计算结果为零(相当于SqlBulkCopyOptions.Default。)


工作正常,允许大容量插入完成。

感谢gbn的提示,我在意识到答案之前尝试了它们(见下文)。我不知道这些选项存在,但一些创造性的搜索让我来到了这里。解决了我的问题,将SqlBulkCopy复制到带有触发器的表中,而无需授予我的SQL登录ALTER table权限!
SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints