SqlServer 中的觸發器


SqlServer 觸發器實現多表之間同步增加、刪除與更新

定義: 何為觸發器?在SQL Server里面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。

 

觸發器的使用模版如下

 

CREATE TRIGGER 觸發器名稱 
ON 表名稱
AFTER INSERT /UPDATE/DELETE
AS 

BEGIN INSERT INTO 
B表(B表字段1,B表字段2,B表字段3)
SELECT A表字段1,A表字段2,A表字段3 
FROM INSERTED/DELETED
END

 

  

 

 

新建兩張表,如下,第一張是操作表,第二張表是為了測試觸發器效果的

create table dbo.testtable(
id int identity (1,1),
name varchar(20))

create table dbo.htesttable(
id int identity (1,1),
name varchar(20),
timerecord datetime,
updatedt datetime)

 

新增的觸發器

CREATE TRIGGER [DBO].[TRG_TESTTABLE_INSERT] ON [DBO].[TESTTABLE] AFTER INSERT AS
BEGIN

INSERT INTO HTESTTABLE 
SELECT I.NAME+'INSERT' ,GETDATE(),GETDATE()
FROM INSERTED I 
    
END

更新的觸發器

 

ALTER/Create  TRIGGER [dbo].[TRG_TESTTABLE_update] ON [dbo].[testtable] AFTER update AS
BEGIN

INSERT INTO HTESTTABLE 
SELECT I.NAME + 'update',getdate(),getdate()
FROM deleted I 

INSERT INTO HTESTTABLE 
SELECT I.NAME + 'update2',getdate(),getdate()
	FROM inserted I 
    
END

 

解釋:
在刪除(delete)數據的時候,可以假定數據庫將要刪除的數據放到一個deleted臨時表中,我們可以向讀取普通的表一樣,select 字段 from deleted
而insert的時候道理一樣,只不過是把要插入的數據放在inserted表中。

更新操作可以認為是執行了兩個操作,先把那一行記錄delete掉,然后再insert,
這樣update操作實際上就對deleted表和inserted表的操作,所以不會有updated表了;

有的時候兩個表是主外鍵關系,想刪除主表數據的同時把子表相關的數據也刪除,
這個時候如果用觸發器就沒有效果了,因為這個觸發器是在你刪除表后才觸發的,
這個時候直接終止,提示“有主外鍵關系,不能刪除等”,所有這樣的刪除觸發器是沒有效果的

 

  

 

刪除的觸發器

CREATE   TRIGGER [DBO].[TRG_TESTTABLE_DELETE] ON [DBO].[TESTTABLE] AFTER DELETE AS
BEGIN

INSERT INTO HTESTTABLE 
SELECT D.NAME + 'DELETE',GETDATE(),GETDATE()
FROM DELETED D
    
END

 

 

 

如果需要對觸發器重命名,只要記住觸發器是特殊的存儲過程即可,命令如下

exec sp_rename oldxxx, newxxx

如何查詢觸發器

SELECT * FROM SYSOBJECTS WHERE XTYPE='TR'

禁用:alter table 表名 disable trigger 觸發器名稱
啟用:alter table 表名 enable trigger 觸發器名稱

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM