2010-01-15 46 views

回答

2

对于SQL Server,您不打算在单个语句中打破Delete命令的原子性 - 即使是在明确的事务之外发布,您也将在隐式中执行 - 例如,你看到的全部或全部。

在显式事务的范围内,错误将默认回滚整个事务,但可以更改此属性以仅尝试并回滚在整个事务(多个语句)中出错的单个语句是SET XACT_ABORT。

由于您的删除操作是单一语句,因此XACT_ABORT无法帮助您 - 行会出错,删除操作将回滚。

如果你知道你将要面对的(如FK违反约束的错误,那么你可以确保你删除具有合适的where子句不尝试删除,你知道会产生错误的行。

+0

这比通过试验和错误删除要好得多 – Paddy 2010-01-15 09:18:37

+0

我知道错误是什么,我只是想使用错误而不是一个WHERE,即删除所有可以删除的行。 – Shimmy 2010-01-18 20:34:20

+0

如果不跳过循环(运行循环批量删除并将批量大小设置为1并且使用Set XACT等),您将无法在SQL Server中运行。箍,你知道你需要的where子句,我会用它。 – Andrew 2010-01-19 09:13:01

0

这是一个完全取决于您使用的数据库风格的功能。有些会有它,有些则不会。例如,Oracle为我们提供了批量记录DML错误的能力。 The example in the documentation uses an INSERT statement但同样的原则适用于任何DML语句。

+0

我重申了我的问题,它是MS SQL-Server。 – Shimmy 2010-01-15 06:14:45

相关问题