使用output into搬移資料表內容到另一資料表

在sql 語法中並無move table的語法,所以通常大部人的寫法會先將來源資料表寫入到另一目的資料表,然後再將資料來源資料刪除,這樣寫法分開兩段sql執行,這樣若沒有包在交易(tran)內,就會造成可能先執行寫入目的資料表後,刪除來源資料表異常時,發生不一致現象,可以改寫使用delete output into 的寫法就不會發生以上不一致問題。

無使用交易寫法

insert into [dbo].[t11]
select * from [dbo].[t1]

delete from [dbo].[t1]

使用交易寫法

SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
insert into [dbo].[t11]
select * from [dbo].[t1]
delete from [dbo].[t1]
COMMIT TRANSACTION;
GO

使用delete output into交易寫法

delete  FROM[dbo].[t1]
output deleted.*
into [dbo].[t11]

執行範例

select * from [dbo].[t1]
select * from [dbo].[t11]

image

執行語法

delete  FROM[dbo].[t1]
output deleted.*
into [dbo].[t11]

查詢結果

select * from [dbo].[t1]
select * from [dbo].[t11]

image

發表留言