Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否在SQL Server中作为事务开始和结束_Sql Server_Transactions - Fatal编程技术网

Sql server 是否在SQL Server中作为事务开始和结束

Sql server 是否在SQL Server中作为事务开始和结束,sql-server,transactions,Sql Server,Transactions,在SQL Server中使用SQL脚本 如果我有一块开始。。。结束 BEGIN UPDATE Table1 SET Column1 = 1 UPDATE Table2 SET Column2 = 2 UPDATE Table3 SET Column3 = 3 END 在这种情况下,这是否意味着所有3条update语句都应该一起传递 我的意思是,如果第一次和第二次更新成功,但第三次失败,这是否意味着所有3次更新都将回滚?或仅更新表1和表2,不更新表3 换句话说 上面的脚本是否等同于 UP

在SQL Server中使用SQL脚本

如果我有一块开始。。。结束

BEGIN

UPDATE Table1
SET Column1 = 1

UPDATE Table2
SET Column2 = 2

UPDATE Table3
SET Column3 = 3

END
在这种情况下,这是否意味着所有3条update语句都应该一起传递

我的意思是,如果第一次和第二次更新成功,但第三次失败,这是否意味着所有3次更新都将回滚?或仅更新表1和表2,不更新表3

换句话说

上面的脚本是否等同于

UPDATE Table1
SET Column1 = 1

UPDATE Table2
SET Column2 = 2

UPDATE Table3
SET Column3 = 3
BEGIN TRANSACTION;  

UPDATE Table1
SET Column1 = 1

UPDATE Table2
SET Column2 = 2

UPDATE Table3
SET Column3 =  3

COMMIT;  
或者相当于

UPDATE Table1
SET Column1 = 1

UPDATE Table2
SET Column2 = 2

UPDATE Table3
SET Column3 = 3
BEGIN TRANSACTION;  

UPDATE Table1
SET Column1 = 1

UPDATE Table2
SET Column2 = 2

UPDATE Table3
SET Column3 =  3

COMMIT;  

开始和结束定义一个语句块,用于控制流。开始事务/提交事务/回滚事务用于数据库事务。如果数据库在事务启动前处于一致状态,则在事务完成后,数据库将处于一致状态。如果提交事务之前出现故障,则对数据库所做的所有更改都将回滚到事务开始时。

总结:没有开始/结束是完全不等效的。@DaleBurrell您的意思是它不是事务,因此,如果第一次更新成功,第三次更新失败,它仍然会在不回滚的情况下更新第一次添加begin/end对内部T-SQL的原子性没有任何影响。由于应答状态开始/结束用于控制流,例如允许if语句包含要执行的多个表达式。