我有一个新添加了触发器的表。
当我尝试运行批处理文件并使用SqlBulkCopy上传文件时,它无效。
在阅读之后,添加SqlBulkCopyOptions.FireTriggers将触发设置到表的触发器,我添加了它。
但我仍然得到同样的错误 - '批量复制失败。用户对表没有ALTER TABLE权限。如果表具有触发器或检查约束,则批量复制操作的目标表上需要ALTER TABLE权限,但是' FIRE_TRIGGERS'或者' CHECK_CONSTRAINTS'批量提示未指定为批量复制命令的选项。 '
知道该怎么做?任何帮助将不胜感激
答案 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))
还有其他办法吗?