主頁(yè) > 知識(shí)庫(kù) > SQL Server誤區(qū)30日談 第4天 DDL觸發(fā)器就是INSTEAD OF觸發(fā)器

SQL Server誤區(qū)30日談 第4天 DDL觸發(fā)器就是INSTEAD OF觸發(fā)器

熱門標(biāo)簽:百度競(jìng)價(jià)排名 服務(wù)外包 地方門戶網(wǎng)站 Linux服務(wù)器 AI電銷 網(wǎng)站排名優(yōu)化 呼叫中心市場(chǎng)需求 鐵路電話系統(tǒng)

誤區(qū) #4: DDL觸發(fā)器(SQL Server 2005之后被引入)就是INSTEAD OF觸發(fā)器

這是錯(cuò)誤的

    DDL觸發(fā)器的實(shí)現(xiàn)原理其實(shí)就是一個(gè)AFTER觸發(fā)器。這個(gè)意思是先發(fā)生DDL操作,然后觸發(fā)器再捕捉操作(當(dāng)然如果你在觸發(fā)器內(nèi)寫了Rollback,則也可能回滾)。

    存在Rollback也意味著這個(gè)觸發(fā)器并不像你想象的那么輕量,來(lái)看下面的例子:

    ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul'

    如果存在一個(gè)defined for ALTER_TABLE事件的DDL觸發(fā)器,或是一個(gè)更寬泛的事件比如DDL_TABLE_EVENTS。上面那個(gè)DDL代碼將會(huì)對(duì)表中每一行數(shù)據(jù)加進(jìn)新列,之后觸發(fā)觸發(fā)器操作。如果你的觸發(fā)器中存在回滾來(lái)阻止DDL操作發(fā)生,那么這個(gè)代價(jià)可不小(不信的話你自己看看這么做后產(chǎn)生的日志)。

    當(dāng)然更好的辦法是對(duì)ALTER設(shè)置GRANT或是DENY權(quán)限,或是僅僅允許通過你創(chuàng)建的存儲(chǔ)過程進(jìn)行DDL操作。

    但不管怎么樣,雖然DDL觸發(fā)器可以達(dá)到禁止DDL的操作的目的,但代價(jià)昂貴。而DDL觸發(fā)器的好處是允許記錄某些人做了某些修改表之類的操作,所以我并不是說不允許DDL觸發(fā)器,而是要小心使用。

    Kimberly有一篇非常好的關(guān)于DDL觸發(fā)器的博文:"EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention)”。

您可能感興趣的文章:
  • 關(guān)于喜憂參半的SQL Server觸發(fā)器詳解
  • 利用SQL Server觸發(fā)器實(shí)現(xiàn)表的歷史修改痕跡記錄
  • SQLSERVER對(duì)加密的存儲(chǔ)過程、視圖、觸發(fā)器進(jìn)行解密(推薦)
  • SQL Server 使用觸發(fā)器(trigger)發(fā)送電子郵件步驟詳解
  • SQL Server實(shí)現(xiàn)用觸發(fā)器捕獲DML操作的會(huì)話信息【實(shí)例】
  • SQL Server:觸發(fā)器實(shí)例詳解
  • SqlServer觸發(fā)器詳解
  • SqlServer實(shí)現(xiàn)類似Oracle的before觸發(fā)器示例
  • SQL SERVER中各類觸發(fā)器的完整語(yǔ)法及參數(shù)說明
  • SQL SERVER 觸發(fā)器介紹
  • SQL Server 觸發(fā)器詳情

標(biāo)簽:銅川 黃山 湖南 湘潭 蘭州 崇左 仙桃 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server誤區(qū)30日談 第4天 DDL觸發(fā)器就是INSTEAD OF觸發(fā)器》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266