2017-10-04 85 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,則該語句失敗,並且表變量被丟棄,留下一個新表並且沒有數據。

我的做法是用稍微不同的名稱創建新表,加載數據,在語句中更改兩個表名,然後一旦所有數據被確認加載後,刪除原始表。