SQL SERVER 觸發器 inserted和deleted表
在觸發器語句中用兩個特殊的表一個是deleted表和inserted。它們是通過觸發器操作自動建立駐留在記憶體中的臨時表。
Deleted表用於儲存 DELETE和 UPDATE語句所影響的行的複本。在執行DELETE或 UPDATE語句時,行從觸發器表中刪除,並傳輸到 deleted表中。Deleted表和觸發器表通常沒有相同的行。
Inserted 表用於儲存 INSERT 和 UPDATE 語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時新增到 inserted 表和觸發器表中。Inserted 表中的行是觸發器表中新行的副本。
如果我們想要獲取我們剛插入或刪除資料庫中的內容,就可以從這兩張表中獲取
下面附上我寫的例子,就是當向人工錄入資料表中插入資料時,獲取插入的資料值,並操作其他表格
USE [DB_GreenPower]GO /****** Object: Trigger [dbo].[deleteData] Script Date: 2016/12/17 22:53:06 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE TRIGGER [dbo].[deleteData]
ON [dbo].[TB_DataBase_ManEntry_Status]
AFTER INSERT
AS
BEGIN
--獲取插入時間的第一天對應的時間
declare @time datetime,@RecTime datetime
select @RecTime=RecTime from inserted
set @time=CONVERT(datetime,DATENAME(year, @RecTime)+'-'+DATENAME(MONTH, @RecTime)+'-1')
--新增完人工錄入資料以後,刪除之前建立的人工錄入資料
--刪除電網的資料
delete from TB_DataHandle_PN_OneHour where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_PN_OneDay where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_PN_OneMouth where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
--刪除電廠的資料
delete from TB_DataHandle_PP_OneHour where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_PP_OneDay where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_PP_OneMouth where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
--刪除輸配環節的資料
delete from TB_DataHandle_TADL_OneHour where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_TADL_OneDay where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_TADL_OneMouth where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
--刪除電網彙總的資料
delete from TB_DataHandle_TotalPN_OneDay where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
delete from TB_DataHandle_TotalPN_OneMouth where RecTime>@time and RecTime<=DATEADD(MONTH,1,@time)
--判斷年彙總資料是否刪除
declare @month int
set @month=DATENAME(YEAR,@RecTime)
if @month=12
begin
delete from TB_DataHandle_TotalPN_OneYear where RecTime>=DATEADD(MONTH,-12,@time) and RecTime<@time
end
END GO