存储过程中的所有语句都是一个事务

Are all statements in a stored procedure ONE transaction

如果存储过程包含多个语句,例如首先是 insert,然后是 update,最后是 delete,存储过程在 delete 中间被杀死,insertupdate 也得回滚?或者它只回滚 delete 即隐式事务?

Transactions中所述,每条语句将作为隐式事务执行。如果语句失败,则先前语句的效果将保持不变。

请注意,整个存储过程可能会在调用代码创建的显式事务中执行。

必须提交插入和更新但删除语句已回滚

由于您在存储过程中没有明确的 BEGIN TRANSACTION,每个语句将 运行 自己执行,如果出现错误则无法回滚任何更改。

但是,如果在调用存储过程之前发出 BEGIN TRANSACTION,则所有语句都分组在一个事务中,并且可以在存储过程执行后提交或回滚。

参考:KM。 How does SQL Server treat statements inside stored procedures with respect to transactions?