SQL Server中的TRUNCATE在最后一个TRUNCATE失败时回滚

时间:2017-11-15 11:59:26

标签: sql-server

我正在启动一个事务并执行多个truncate table语句但是如果last失败则会回滚所有truncate。我试图在SQL Server命令提示符上描述相同的行为。

我正在尝试在SQL Server 2012中执行以下SQL语句:

create table pkt1(id integer)
GO

create table pkt2(id integer)
GO

insert into pkt1 values(10)
insert into pkt1 values(20)

insert into pkt2 values(10)
insert into pkt2 values(20)

select * from pkt1

输出:

id
------
10
20


select * from pkt2

结果:

id
------
10
20


begin transaction
   truncate table pkt1;
   truncate table pkt2;
   truncate table pkt3;
   commit;

错误:

  

Msg 4701,Level 16,State 1,Server PNI6W11198,Line 4
  无法找到对象“pkt3”,因为它不存在或您没有权限。

select * from pkt2

输出:

id
------
10
20

select * from pkt1

输出:

id
-----
10
20

TRUNCATE应该是Transact SQL,应该为pkt1和pkt2提交早期截断。但它确实为所有人回滚。

这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

pkt3不存在,因此脚本失败。

您的交易包括所有三个truncate语句:一个失败 - 它们都失败