如何在SQL Server Management Studio(SSMS)中关闭自动提交功能
如何在SSMS中设置手动提交/回滚每条查询(无需显式启动事务)
嘿,这个需求我太熟悉了——之前测试数据变更的时候,就怕不小心自动提交了没法回滚,刚好知道怎么调整SSMS的设置来实现:
方法一:通过SSMS选项全局设置
这是最省心的方式,设置后所有新建的查询窗口都会默认使用手动提交模式:
- 打开SSMS,点击顶部菜单栏的 工具 → 选项
- 在弹出的窗口里,展开 查询执行 → SQL Server → ANSI
- 找到 SET IMPLICIT_TRANSACTIONS 选项,勾选它
- 点击 确定 保存设置,重启SSMS生效(或者直接新建一个查询窗口,旧窗口不会自动应用新设置)
设置完成后,你每执行一条查询,SSMS都会自动帮你开启一个隐式事务——不需要手动写BEGIN TRANSACTION,执行完查询后,你可以手动执行:
COMMIT:确认提交所有变更ROLLBACK:撤销所有未提交的变更
方法二:单窗口临时生效(无需修改全局设置)
如果不想全局改动,只想让当前查询窗口生效,可以手动执行这条命令:
SET IMPLICIT_TRANSACTIONS ON;
执行后,当前窗口的所有查询都会进入隐式事务模式,同样用COMMIT或ROLLBACK来控制提交/回滚。要是想切回默认的自动提交模式,执行:
SET IMPLICIT_TRANSACTIONS OFF;
重要注意事项
- 开启隐式事务后,一定要记得及时提交或回滚!如果忘记操作,你的会话会一直持有锁,可能影响其他业务操作
- 多条未提交的查询会被归到同一个事务里,执行
ROLLBACK会一次性撤销所有这些变更 - 部分DDL语句(比如
CREATE TABLE、ALTER TABLE)在SQL Server中会自动提交事务,哪怕开了隐式事务,这些语句执行后之前的未提交变更也会被自动提交,这点要特别留意
内容的提问来源于stack exchange,提问作者kalitsov




