在sql 語法中並無move table的語法,所以通常大部人的寫法會先將來源資料表寫入到另一目的資料表,然後再將資料來源資料刪除,這樣寫法分開兩段sql執行,這樣若沒有包在交易(tran)內,就會造成可能先執行寫入目的資料表後,刪除來源資料表異常時,發生不一致現象,可以改寫使用delete output into 的寫法就不會發生以上不一致問題。
無使用交易寫法
insert into [dbo].[t11] delete from [dbo].[t1] |
使用交易寫法
SET XACT_ABORT ON; |
使用delete output into交易寫法
delete FROM[dbo].[t1] |
執行範例
select * from [dbo].[t1]
select * from [dbo].[t11]
執行語法
delete FROM[dbo].[t1]
output deleted.*
into [dbo].[t11]
查詢結果
select * from [dbo].[t1]
select * from [dbo].[t11]