Sqlbulkcopyoptions.firetriggers不会触发表中的触发器

时间:2017-06-28 17:18:27

标签: sql-server vb.net triggers

我有一个新添加了触发器的表。

当我尝试运行批处理文件并使用SqlBulkCopy上传文件时,它无效。

在阅读之后,添加SqlBulkCopyOptions.FireTriggers将触发设置到表的触发器,我添加了它。

但我仍然得到同样的错误 - '批量复制失败。用户对表没有ALTER TABLE权限。如果表具有触发器或检查约束,则批量复制操作的目标表上需要ALTER TABLE权限,但是' FIRE_TRIGGERS'或者' CHECK_CONSTRAINTS'批量提示未指定为批量复制命令的选项。 '

知道该怎么做?任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

SQL Server要求ALTER TABLE权限批量插入数据,而不使用FireTriggers和CheckConstraint选项,以及KeepIdentity选项,以帮助防止最低权限用户违反SQL Server强制执行的数据完整性规则。请参阅What permission do I need to use SqlBulkCopy in SQL Server 2008?

默认情况下,SqlBulkCopy的FireTriggers和CheckConstraint选项处于关闭状态,以最大限度地提高性能。应用程序负责确保数据完整性,否则当这些选项关闭时,约束和触发器将强制实施数据完整性。在没有这些选项的情况下批量复制数据后,外键和检查约束变得不可信,并且必须在ALTER TABLE ... CHECK CONSTRAINT`之后重新验证,之后SQL Server将再次信任约束。

当FireTriggers和CheckConstraint选项打开且没有KeepIdentity选项关闭时,SELECT/INSERT以外的任何特殊权限都不能使用SqlBulkCopy。

答案 1 :(得分:0)

我也尝试添加Checkconstraints,但它说的是同样的错误。

using(var bulkCopy = new SqlBulkCopy(connection,SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints))

还有其他办法吗?