我正在启动一个事务并执行多个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提交早期截断。但它确实为所有人回滚。
这是预期的行为吗?
答案 0 :(得分:0)
表pkt3
不存在,因此脚本失败。
您的交易包括所有三个truncate
语句:一个失败 - 它们都失败