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
2024-09-01 06:17:51
这个是使用SqlBulkCopy进行批量复制导致的异常,此问题涉及大容量导入数据时,控制大容量导入操作是否执行(触发)触发器。大容量导入操作应只对包含支持多行插入的 INSERT 和 INSTEAD OF 触发器的表执行触发器。
SqlBulkCopy(insert bulk)命令语句在默认情况下会禁用触发器,可以启用FIRE_TRIGGERS;报错“如果某个大容量复制操作的目标表具有触发器或检查约束,但未指定“fire_triggers”或“check_constraints”大容量提示,则需要对该表具有“alter table”权限。”已说明并未指定fire_triggers且目标表有触发器,指定SqlBulkCopyOptions.FireTriggers即可启用,语句为:SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction | SqlBulkCopyOptions.FireTriggers)。
至此,该异常的原因和解决办法就是这样。
另外,MSDN表示“大容量导入数据时,您可以控制大容量导入操作是否执行(触发)触发器。大容量导入操作应只对包含支持多行插入的 INSERT 和 INSTEAD OF 触发器的表执行触发器”,所以对触发器是有要求的,一是insert触发器,二是instead of。
上面搞清楚之后,就是另外一个话题:一次插入多条数据,触发器在必要时需要使用游标来实现所需功能。
最新文章
- 错误";ORA-04091: table is mutating, trigger/function may not see it";的原因以及解决办法
- java new Date()得到的时间和系统时间不一样
- Elasticsearch聚合 之 DateRange日期范围聚合
- Java基础之处理事件——添加工具提示(Sketcher 9 with tooltips)
- web前端开发浏览器兼容性 - 持续更新
- python中xrange与range的异同
- JavaScript和prototype
- Mybatis-Spring SqlSessionTemplate 源码解析
- Scala入门系列(十一):模式匹配
- rubygem若干常用选项参数
- Linux下C语言生成可执行文件的过程
- ios uibutton加数字角标
- [C#] LINQ之LookUp
- MYSQL事务处理失效原因
- [apr] Apache Portable Runtime
- day34 线程池 协程
- 使用googletest进行C++单元测试(Netbeans为例)
- Hibernate---介绍
- I-team 博客的 gitlab-runner 持续集成实践
- Android解析ActivityManagerService(二)ActivityTask和Activity栈管理