首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以回滚而不说“回滚”吗?

我们可以回滚而不说“回滚”吗?
EN

Stack Overflow用户
提问于 2012-05-08 05:33:32
回答 1查看 111关注 0票数 2

我在SQL Server2005中执行此操作。我有一个表,只有一个int类型的列,你不能在其中插入char。

如果我运行这个命令,我会在我的表中插入一行。

代码语言:javascript
复制
INSERT INTO TestTable VALUES(3)   --success 
INSERT INTO TestTable VALUES('b') --fail, cannot insert char

如果我运行这个命令,我会在我的表中插入零行。因此,一个事务将2个任务组合到单个执行单元中。如果一个任务失败,则整个事务都会失败。

代码语言:javascript
复制
BEGIN TRANSACTION 
INSERT INTO TestTable VALUES(3)
INSERT INTO TestTable VALUES('b')
COMMIT TRANSACTION

我的问题是:似乎ROLLBACK TRANSACTION无用,因为我在上面的代码中没有ROLLBACK,但它仍然是回滚的……有人能帮我理解这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2012-05-08 09:45:24

在SQL Server中,默认情况下,所有代码都在隐式事务中运行。如果在一个批处理中提交这两个语句,并且查询选项XACT_ABORT为on,则任何失败都应该回滚整个事务。默认行为是仅回滚导致错误的语句。如果您在各自的批处理中提交语句(通过在SSMS中分别突出显示它们并点击F5或在其间添加"go“语句),我认为您会看到不同的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10489479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档