當伺服器或資料庫中發生資料定義語言(ddl)事件時將被呼叫。如create,alter,drop等操作。如果要執行以下操作,可以使用ddl觸發器:
防止對資料庫架構進行更改
希望資料庫中發生某些情況以響應資料庫架構中的更改
要記錄資料庫架構中的更改或事件
use [xxhis_kf]
go/****** object: ddltrigger [ddl_log] script date: 09/12/2017 20:31:28 ******/
set ansi_nulls on
goset quoted_identifier on
gocreate trigger [ddl_log] on database
for ddl_database_level_events
asbegin
set nocount on;
declare @eventtxt xml,@eventtype varchar(50)=』』,@parame varchar(50)=』』,
@schemaname varchar(30)=』』,@objtype varchar(50)=』』,
@objname varchar(100)=』』,@sqltext varchar(max)=』』,
@sqltexts varchar(max)=』』,@stext varchar(max)=』』;
set @eventtxt=eventdata();
;with tab as(
select
@eventtxt as xmls
)select
@eventtype= xmls.value(』(/event_instance/eventtype)[1]』 ,『varchar(50)』 ) ,
@schemaname=xmls.value(』(/event_instance/schemaname)[1]』 ,『varchar(30)』 ) ,
@objtype= xmls.value(』(/event_instance/objecttype)[1]』 ,『varchar(50)』 ) ,
@objname= xmls.value(』(/event_instance/objectname)[1]』 ,『varchar(100)』) ,
@parame = xmls.value(』(/event_instance/parameters)[1]』 ,『varchar(100)』) ,
@sqltext=xmls.value(』(/event_instance/tsqlcommand)[1]』,『varchar(max)』)
from tab;
if @objname in(『proc_version_script』,『ddl_renametrigger』,『ddl_renametrigger』)
begin
–set @objname=『不能對』+@objname+『物件進行操作』;
– raiserror (@objname, 16,1);
–proc_version_script
return;
end;
if @eventtype in(『create_view』 ,『alter_view』 ,『drop_view』,
『create_trigger』 ,『alter_trigger』 ,『drop_trigger』,
『create_table』 ,『alter_table』 ,『drop_table』,
『create_function』 ,『alter_function』 ,『drop_function』,
『create_procedure』 ,『alter_procedure』 ,『drop_procedure』,
『create_synonym』 ,『drop_synonym』,
『create_index』 ,『alter_index』 ,『drop_index』
)insert into ddl_log
(eventtype,schemaname,objtype,objname,execdate,terminal)
select @eventtype,@schemaname,@objtype,@objname,sysdatetime(),host_name();
end;
goset ansi_nulls off
goset quoted_identifier off
godisable trigger [ddl_log] on database
goenable trigger [ddl_log] on database
go
DDL觸發器與DML觸發器比較
dml觸發器 要防止對資料庫架構進行某些更改。希望資料庫中發生某種情況以響應資料庫架構中的更改。要記錄資料庫架構中的更改或事件。僅在執行觸發 ddl 觸發器的 ddl 語句後,ddl 觸發器才會激發。ddl 觸發器無法作為 instead of 觸發器使用。下面的示例顯示如何使用 ddl 觸發器阻止...
DDL觸發器的應用
一般來說,dml觸發器可以監測得到具體物件的具體資料的變更。然而,ddl觸發器則能夠對一些伺服器的行為作出監控,比如我們可以利用ddl觸發器來做登入限制啊,做一些日誌控制啊之類的。好,然後簡單粗暴上例子 首先我們做乙個監控建立表的觸發器,ddl觸發器,乙個關鍵點是在於 eventdata 這個函式提...
建立觸發器
視覺化資料庫工具 對於 microsoft sql server 資料庫,可以在 transact sql 中編寫觸發器,而對於 oracle 資料庫,則可以在 pl sql 中進行編寫。通過指定下列內容建立觸發器 建立觸發器 在 伺服器資源管理器 中,展開 表 資料夾。右擊要在其上建立觸發器的表名...