我希望当我执行查询例如DELETE FROM Contact
,并且在事务过程中发生错误时,它应该删除能够被删除的行,并为无法删除的行提出所有相关的错误。如何在某些行失败时保持事务?
回答
对于SQL Server,您不打算在单个语句中打破Delete命令的原子性 - 即使是在明确的事务之外发布,您也将在隐式中执行 - 例如,你看到的全部或全部。
在显式事务的范围内,错误将默认回滚整个事务,但可以更改此属性以仅尝试并回滚在整个事务(多个语句)中出错的单个语句是SET XACT_ABORT。
由于您的删除操作是单一语句,因此XACT_ABORT无法帮助您 - 行会出错,删除操作将回滚。
如果你知道你将要面对的(如FK违反约束的错误,那么你可以确保你删除具有合适的where子句不尝试删除,你知道会产生错误的行。
如果您使用MySQL您可以take advantage of the DELETE IGNORE
syntax。
唉! 我重申了我的问题 – Shimmy 2010-01-15 06:13:52
这是一个完全取决于您使用的数据库风格的功能。有些会有它,有些则不会。例如,Oracle为我们提供了批量记录DML错误的能力。 The example in the documentation uses an INSERT statement但同样的原则适用于任何DML语句。
我重申了我的问题,它是MS SQL-Server。 – Shimmy 2010-01-15 06:14:45
- 1. 在失败的事务中执行某些SQL代码
- 2. 在事件中运行某些程序失败
- 3. 如何在某些承诺失败时继续使用$ q.all()
- 4. currentCell在验证失败时保持不变。 - CellEndEdit事件
- 5. 如何在使用preg_replace时保持某些字符不变?
- 6. perl:当某事失败时捕获GetOptions
- 7. 我的计时器正在执行的方法保持失败
- 8. HttpClient在某些请求上失败
- 9. scipy.interpolate.lagrange在某些数据上失败
- 10. 如何在调整高BufferedImage大小时保持/支持某些像素值?
- 11. 如何解决,错误:任务':app:mergeDebugResources'的执行失败。 >错误:java.lang.RuntimeException:某些文件处理失败
- 12. SQLite事务失败
- 13. PostgreSQL事务失败:“没有正在进行的事务”
- 14. SQL如何在批量插入失败时回滚事务
- 15. 保持默认值失败
- 16. 构建保持失败AppVeyor
- 17. 如何强制Nhibernate事务失败?
- 18. 如何在事务回滚时保持身份认证?
- 19. 如何让buildbot通过某些事件来运行任务?
- 20. 在某些服务器上使用动态数据框架更新行失败
- 21. VB.NET某些文件的MySQL blob保存失败
- 22. Grails:如何在事务已经失败时继续验证时如何构建事务
- 23. SSIS如何在并行步骤失败时失败包?
- 24. 某些文件运算失败,mergeDebugResources失败
- 25. 发布网站某些页面失败
- 26. OSX - `去GET`失败,某些去包
- 27. 'npm install'某些回购失败
- 28. 当某些应用程序正在运行时,StartActivity意图失败
- 29. 如何在失败的输入后保持屏幕上的reCaptcha
- 30. 如何在悬停时保持运行?
这比通过试验和错误删除要好得多 – Paddy 2010-01-15 09:18:37
我知道错误是什么,我只是想使用错误而不是一个WHERE,即删除所有可以删除的行。 – Shimmy 2010-01-18 20:34:20
如果不跳过循环(运行循环批量删除并将批量大小设置为1并且使用Set XACT等),您将无法在SQL Server中运行。箍,你知道你需要的where子句,我会用它。 – Andrew 2010-01-19 09:13:01