[SQL]使用一個基於Insert、Update及Delete語法進行output into資料表的範例來執行測試

使用output語法可帶回兩種資訊

  • INSERTED.欄位名稱:可輸出經過INSERT 、 UPDATE、MERGE完成後,被影響的RowData
  • DELETED.欄位名稱:可輸出經過UPDATE、DELETE、MERGE完成後,被影響的RowData

並搭配into語法,寫入其他的資料表中

 

declare @origin_data table ( --原始資料
	recno int not null,
	info varchar(30) null,
	buildtime datetime not null,
	modifytime datetime null
) 

declare @clean_data table (  --被修改的且經過清理的資料
	recno int not null,
	info varchar(30) null,
	logdate datetime not null
) 

declare @delete_data table  --被刪除的資料
(
	recno int not null,
	info varchar(30) null,
	buildtime datetime not null
)

--插入原始資料
insert into @origin_data values(1 , '資料1' , '2019-04-07', null)
insert into @origin_data values(2 , '資料2' , '2019-04-08', null)
insert into @origin_data values(3 , '資料3' , '2019-04-09', null)
insert into @origin_data values(4 , '資料4' , '2019-04-10', null)

select * from @origin_data  --檢閱原始資料

update @origin_data  --修改資料
	set 
		info = '資料' + convert(varchar, recno)  + '被修改囉',
		modifytime = getdate()
	output   --輸出「觸發update時,被修改的資料」
		inserted.recno as recno,
		inserted.info as info,
		(case   --取最新的編輯時間
			when inserted.modifytime > inserted.buildtime
				then inserted.modifytime
			else
				inserted.buildtime
		end) as logdate
	into @clean_data
	where
		recno in (3,4)

select * from @origin_data  --檢查被修改的結果
select * from @clean_data --檢查output...into後的資料

delete @origin_data 
	output   --輸出「觸發delete時,被刪除的資料」
		deleted.recno,
		deleted.info,
		getdate()
	into @delete_data
	where modifytime is null

select * from @delete_data --檢閱被刪除的資料
select * from @origin_data --檢閱原始的資料

執行結果:

參考來源:https://dotblogs.com.tw/j_girl/2014/04/27/144876