在SQL Server中更新后是否需要执行Commit语句
技术问答
442 人阅读
|
0 人回复
|
2023-09-14
|
我已经通过SQL Server管理器对记录进行了一些更新。
* c3 Y) P ?& l* H6 i7 z, z由于Update语句没有显式提交,因此我尝试手动编写它。
" Y- U! e: i! aUpdate mytable
) G/ q% O `+ | E' g- Dset status=0;) u. e/ a& O5 n7 w* {
Commit;
/ ^0 \' M, b- V: J. @& e6 y+ j- E我收到消息,因为Commit没有开始交易1 u7 _; K: O2 o6 D; a
% z/ i. \" \! F8 X* A. W: i解决方案:- s5 n3 f% y S
+ B4 S4 W5 }) w, \" t6 n
: M) I$ ~4 h2 r% ]& |" x# B- t; o% ?4 Z, K. k7 ]
SQL Server Management Studio的隐式提交已打开,因此所有执行的语句均被隐式提交。
+ a0 H( P( p. X9 n' f; H6 Q4 W如果您来自Oracle背景,这可能是一件令人恐惧的事情,在Oracle背景中,默认情况是不自动提交命令,但这并不是什么大问题。' c" w5 |0 a/ C/ ]; `2 Y$ v, g; \
如果您仍想使用临时交易,则可以随时执行
/ m! n7 H' g& R0 ]' j5 vBEGIN TRANSACTION
; c1 H4 E: ]. R4 {9 e9 p2 v/ Y1 a在SSMS中运行,然后系统会等待您提交数据。" v. g" V# o8 r
如果要复制Oracle行为并启动隐式事务,则每当发出某些DML / DDL时,都可以在以下位置设置SET IMPLICIT_TRANSACTIONS复选框:" w/ S* `# M5 Q: B1 I R, O
Tools -> Options -> Query Execution -> SQL Server -> ANSI |
|
|
|
|
|