存储过程中的所有语句都是一个事务
Are all statements in a stored procedure ONE transaction
如果存储过程包含多个语句,例如首先是 insert
,然后是 update
,最后是 delete
,存储过程在 delete
中间被杀死,insert
和 update
也得回滚?或者它只回滚 delete
即隐式事务?
如Transactions中所述,每条语句将作为隐式事务执行。如果语句失败,则先前语句的效果将保持不变。
请注意,整个存储过程可能会在调用代码创建的显式事务中执行。
必须提交插入和更新但删除语句已回滚
由于您在存储过程中没有明确的 BEGIN TRANSACTION,每个语句将 运行 自己执行,如果出现错误则无法回滚任何更改。
但是,如果在调用存储过程之前发出 BEGIN TRANSACTION,则所有语句都分组在一个事务中,并且可以在存储过程执行后提交或回滚。
参考:KM。
How does SQL Server treat statements inside stored procedures with respect to transactions?
如果存储过程包含多个语句,例如首先是 insert
,然后是 update
,最后是 delete
,存储过程在 delete
中间被杀死,insert
和 update
也得回滚?或者它只回滚 delete
即隐式事务?
如Transactions中所述,每条语句将作为隐式事务执行。如果语句失败,则先前语句的效果将保持不变。
请注意,整个存储过程可能会在调用代码创建的显式事务中执行。
必须提交插入和更新但删除语句已回滚
由于您在存储过程中没有明确的 BEGIN TRANSACTION,每个语句将 运行 自己执行,如果出现错误则无法回滚任何更改。
但是,如果在调用存储过程之前发出 BEGIN TRANSACTION,则所有语句都分组在一个事务中,并且可以在存储过程执行后提交或回滚。
参考:KM。 How does SQL Server treat statements inside stored procedures with respect to transactions?