1. 程式人生 > >SQL SERVER 觸發器 inserted和deleted表

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

相關推薦

SQL SERVER 觸發器 inserteddeleted

在觸發器語句中用兩個特殊的表一個是deleted表和inserted。它們是通過觸發器操作自動建立駐留在記憶體中的臨時表。 Deleted表用於儲存 DELETE和 UPDATE語句所影響的行的複本。在執行DELETE或 UPDATE語句時,行從觸發器表中刪除,並傳輸到

SQL觸發器中的inserteddeleted

plain add log and 處理 highlight del 兩個 from 簡介:開發也有年頭了,但是觸發器確實用的比較少,但是無容置疑觸發器確實不錯, 最近項目要求需要用到的觸發器特別多、頻繁,覺得很有必要記錄和積累下。

SQL SERVER觸發器應用案例講解(deleted或者inserted

1、觸發器觸發時:    a、系統自動在記憶體中建立deleted表或者inserted表   b、只讀,不允許修改;觸發器執行完成後,自動刪除 2、inserted表 a、臨時儲存了插入或更新後的記錄行 b、可以從inserted表中檢查插入的資料是否滿足業務需求 c、

在建立觸發器時出現不能在 'inserted' 'deleted' 中使用 text、ntext 或 image 列

create trigger trg on t1 for delete or delete 改成 create trigger trg on t1 instead of delete 將for改

sqlserver在觸發器中執行動態sql用到inserteddeleted

  這兩天公司產品中要加個資料同步用的觸發器,oracle版沒什麼問題,很順利的寫完了。       在寫sqlserver版時遇到了麻煩。由於在觸發器中要根據inserted(deleted)表的資料,對另一個表進行更新操作,而這個表的某些欄位是不固定的,所以需要寫成動態

觸發器中的inserteddeleted介紹

觸發器語句中使用了兩種特殊的表:deleted    表和    inserted    表。Microsoft&reg;    SQL  Server  2000 自動建立和管理這些表。可以使用這兩個臨時的駐留記憶體的表測試某些資料修改的效果及設定觸發器操作的條件;

SQL Server 查詢樹結構的首節點尾節點案例

一.建立表 DECLARE @t Table(id CHAR(1),parentId CHAR(1)) INSERT INTO @t values('a','') INSERT INTO @t values('b','a') INSERT INTO @t values('c','b') INSE

觸發器中的inserteddeleted、update

一﹕ 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約`束。二﹕ SQL Server為每個觸發器都建立了兩個專用表﹕Inserted表和Deleted表。這兩個表由系統來

SQL Inserteddeleted詳解

eight produced 應用 pro sele var esc join 特殊的表 create trigger updateDeleteTime on user for update as begin update user set UpdateT

SQL SERVER2008觸發器 inserted deleted

觸發器(trigger):是一種特殊的儲存過程,可以用來對錶實施複雜的完整性約束,保持資料的一致性。當觸發器所保護的資料發生改變時,觸發器會自動被啟用,並執行觸發器中所定義的相關操作,從而保證對資料的不完整性約束或不正確的修改。   在SQL SERVER 2008中,有三

SQL server觸發器例項講解(如何實現兩個的關聯)

SQL觸發器例項1 定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是一個特殊的儲存過程。 常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。 我為什麼要使用觸發器?比如,這麼兩個表: Create

Microsoft SQL Server 觸發器更新、刪除、插入

//表插入CREATE TRIGGER INSERTDATE//INSERTDATE為觸發器名稱 ON A1 AFTER INSERT AS BEGIN INSERT I

觸發器中的inserteddeleted

一﹕ 觸發器是一種特殊的儲存過程﹐它不能被顯式地呼叫﹐而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性約`束。          二﹕ SQL Server為每個觸發器都建立了兩個專用表﹕Inserted表和Deleted表。這兩個表由系統來維護﹐它們存在

sql server觸發器實現插入時操作另一張

以前都是也得mysql,現在寫sqlserver的觸發器,感覺改動還是蠻大的 1.定義變數 #在mysql中變數直接這麼定義就可以了 SET @VALUE = "111"; #在sql server中 declare @count int; #並賦值 set @count

SQL Serversql server更改了數據的字段/新增數據的字段 無法保存

ima png src 無法 取消 解決方法 更改 designers 字段 sql server更改了數據表的字段/新增數據表的字段 無法保存 解決方法:進入 工具-->選項-->Designers-->表設計器和數據庫設計器-->取消勾

SQL server觸發器、存儲過程操作遠程數據庫插入數據,解決服務器已存在的問題

定義 ims val rom 記錄 插入記錄 其它 pre 項目 近期弄了一個小項目,也不是非常復雜,須要將一個數據庫的一些數據備份到另外一個庫。不是本地,可能是網絡上其它的數據庫。想了一下,用了存儲過程和觸發器。也不是非常復雜,首先我須要操作遠程數據庫,於是寫了一個存

SQL Server、OracleMySQL判斷NULL的方法

ron gin round exp style ref int 宋體 oat SQL Server、Oracle和MySQL判斷NULL的方法本文講述SQL Server、Oracle、MySQL查出值為NULL的替換。 在SQL Server Oracle MySQL當數

SQL Server之備份還原系統數據庫

系統數據庫 master model msdb 楊書凡 系統數據庫是管理和維護SQL Server所必須的數據庫,對服務器實例的運行至關重要。每次進行大量更新後必須備份多個系統數據庫,包括master、model、msdb,備份這些系統數據庫,就可以在發生系統故障(如硬盤丟失)時

SQL Server(第一章) 創建 刪除 創建主鍵約束、唯一約束、外鍵約束、CHECK約束、默認約束

tsql mil null employee alter bold soft arc 刪除表 1.Employees員工表 /** 創建Employees員工表 **/ USE TSQL2012 IF OBJECT_ID(‘dbo.Employees‘,‘U‘) IS N

【2018-01-19】Sql Server-觸發器

1-1 觸發器 eight sco 不能 val ted 直接 ins 1 --create table users--創建用戶表 2 --( 3 -- ids int primary key identity(1,1), 4 -- name nvar