2017-10-04 47 views
0

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

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

+0

是的我相信唯一不会发生的情况是需要使用提交语句的oracle sql,但是我必须仔细查看。虽然很容易进行测试,但只需首先选择一个临时表,然后运行带有错误选择的过程并查询临时表的数据库。如果它不存在,那么你知道。 – Danimal

回答

0

除非你在交易中包好,表将被丢弃,因为每个语句将被视为一个隐式事务..

下面

一些测试

create table t1 
(
id int not null primary key 
) 

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

表T11将被丢弃,甚至虽然刀片将引发异常..

一个例子..

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

现在2秒后,结束会话,你仍然可以看到orderstest被丢弃

我比其他select into其他一些语句检查,我没有看到一个原因select into将不同的表现,如果你包这甚至适用声明中存储的过程..

如果你想回滚所有,使用事务或更多更好地利用set xact_Abort on

0

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

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