SQL Server誤區30日談 第4天 DDL觸發器就是INSTEAD OF觸發器。本站提示廣大學習愛好者:(SQL Server誤區30日談 第4天 DDL觸發器就是INSTEAD OF觸發器)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server誤區30日談 第4天 DDL觸發器就是INSTEAD OF觸發器正文
誤區 #4: DDL觸發器(SQL Server 2005以後被引入)就是INSTEAD OF觸發器
這是毛病的
DDL觸發器的完成道理其實就是一個AFTER觸發器。這個意思是先產生DDL操作,然後觸發器再捕獲操作(固然假如你在觸發器內寫了Rollback,則也能夠回滾)。
存在Rollback也意味著這個觸發器其實不像你想象的那末輕量,來看上面的例子:
ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul'
假如存在一個defined for ALTER_TABLE事宜的DDL觸發器,或是一個更廣泛的事宜好比DDL_TABLE_EVENTS。下面誰人DDL代碼將會對表中每行數據加進新列,以後觸發觸發器操作。假如你的觸發器中存在回滾來阻攔DDL操作產生,那末這個價值可不小(不信的話你本身看看這麼做後發生的日記)。
固然更好的方法是對ALTER設置GRANT或是DENY權限,或是僅僅許可經由過程你創立的存儲進程停止DDL操作。
但不論怎樣樣,固然DDL觸發器可以到達制止DDL的操作的目標,但價值昂貴。而DDL觸發器的利益是許可記載某些人做了某些修正表之類的操作,所以我其實不是說不許可DDL觸發器,而是要當心應用。
Kimberly有一篇異常好的關於DDL觸發器的博文:"EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention)”。