丢桌后的例外情况

时间:2017-10-04 16:51:50

标签: sql-server tsql exception drop-table

如果我执行一个删除表的过程,然后使用'SELECT INTO'重新创建它。

如果该程序在删除表后引发异常,是否会发生表丢弃?

2 个答案:

答案 0 :(得分:0)

除非将它们包装在事务中,否则将删除表,因为每个语句都将被视为隐式事务。

下面是一些测试

create table t1
(
id int not null primary key
)

drop table t11
insert into t1
select 1 union all select 1

表t11将被删除,即使insert会引发异常..

又一个例子..

drop table orderstest
print 'dropped table'
waitfor delay '00:00:05'
select * into orderstest
from Orders

现在2秒后,杀死会话,你仍然可以看到订单被删除

我检查了select into以外的其他一些陈述,我没有看到select into表现不同的原因,即使你在一个存储过程中包装语句,这也适用。< / p>

如果您要回滚所有内容,请使用交易或更好地使用set xact_Abort on

答案 1 :(得分:0)

是的,丢弃的表格将会消失。我编写新主键时出现此问题。根据表格,它将所有数据保存到内存中的表变量,删除表格,使用新的pk创建新表格,然后加载数据。如果数据违反了新的pk,则语句失败,表变量被删除,留下一个新表,没有数据。

我的做法是创建名称略有不同的新表,加载数据,在语句中更改两个表名,然后在确认加载所有数据后,删除原始表。