我们是否需要在SQL Server中更新后执行Commit语句

Pat*_*tan 19 sql

我通过SQL Server Manager对记录进行了一些更新.

由于Update语句没有显式提交,我试图手动编写它.

Update mytable
set status=0;
Commit;
Run Code Online (Sandbox Code Playgroud)

我收到消息,因为提交没有开始交易

SWe*_*eko 40

SQL Server Management Studio已启用隐式提交,因此将隐式提交所有执行的语句.

如果你来自Oracle背景,默认情况下不会自动提交命令,这可能是一个可怕的事情,但这并不是一个问题.

如果您仍想使用临时事务,则可以始终执行

BEGIN TRANSACTION
Run Code Online (Sandbox Code Playgroud)

在SSMS中,并且系统等待您提交数据.

如果要复制Oracle行为并启动隐式事务,则只要发出某个DML/DDL,就可以设置SET IMPLICIT_TRANSACTIONS复选框.

Tools -> Options -> Query Execution -> SQL Server -> ANSI
Run Code Online (Sandbox Code Playgroud)

  • 嗨@SWeko.非常有帮助,thx.我是否正确地假设,未选中复选框意味着隐式提交事务?多数民众赞成我的(默认)情况.那个复选框的命名很奇怪.顺便说一下,这里有相关问题:http://stackoverflow.com/questions/17576649/safely-delete-rows-in-sqlserver-so-you-can-rollback-a-commit (2认同)
  • 如果选中该复选框,则“SELECT”语句将隐式启动一个需要显式提交的事务。 (2认同)

Kri*_*tof 5

与oracle不同的SQL服务器不需要提交,除非您使用事务.
在您的更新语句之后,表将被提交,请勿在此方案中使用commit命令.