几分钟前,在编写新的sproc时,我执行了错误的删除语句。像这样:

Delete From SomeTable Where SomeStatusID=1
进入它10秒后,我意识到我输入了错误状态并点击取消。它说声明被取消了。

我做了一个恢复到一个单独的数据库来取回我刚想到的表,认为因为这不在一个事务中,所以某些记录可能已被删除。

奇怪的是,记录都完好无损。只是好奇为什么会这样 - 在这种情况下它是否将单个delete语句视为事务,即使没有定义显式事务?

有帮助吗?

解决方案

默认情况下,单个DML语句作为事务执行。如果语句成功,则提交事务。如果语句被取消或以其他方式失败,则回滚事务。

此行为内置于引擎中,与management studio无关。请参阅文档中的自动提交交易

其他提示

总是交易。唯一改变的是这些事务是如何彼此隔离的,而在管理工作室中,事务可能没有显式定义,并且在查询完成时自动提交。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top