【问题标题】:Sqlbulkcopyoptions.firetriggers does not fire trigger in the tableSqlbulkcopyoptions.firetriggers 不会触发表中的触发器
【发布时间】:2017-06-28 17:18:27
【问题描述】:

我有一个表,其中有一个新添加的触发器。

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

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

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

知道要做什么吗?任何帮助将不胜感激

【问题讨论】:

  • 你是问如何分配ALTER TABLE权限?
  • 有没有办法在没有更改表权限的情况下解决这个问题?
  • 如果调用用户没有ALTER TABLE权限,还需要添加SqlBulkCopyOption.CheckConstraints。
  • codeusing (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints)) code OR code using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Fire , SqlBulkCopyOptions.CheckConstraints))。 code 请确认是不是第一个?第二个有构建错误
  • 这是第一个。我在文档中没有看到第二种形式的构造函数重载:msdn.microsoft.com/en-us/library/…

标签: sql-server vb.net triggers


【解决方案1】:

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

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

当 FireTriggers 和 CheckConstraint 选项打开并且 KeepIdentity 选项关闭时,除了 SELECT/INSERT 之外没有其他特殊权限可以使用 SqlBulkCopy。

【讨论】:

    【解决方案2】:

    我也尝试添加 Checkconstraints,但它显示相同的错误。

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

    还有其他方法吗?

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      相关资源
      最近更新 更多