掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
以下的文章主要描述的是SQL Server 2005數(shù)據(jù)庫中的DDL觸發(fā)器,我們大家都知道SQL Server 2005數(shù)據(jù)庫中,其新增加了許多新的相關(guān)特性,其中的DDL觸發(fā)器可以說是個(gè)不錯(cuò)的選擇,根據(jù)資料初步學(xué)習(xí)如下,現(xiàn)整理之:

成都創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元銅官做網(wǎng)站,已為上家服務(wù),為銅官各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
在SQL Server 2000中,只能為針對(duì)表發(fā)出的 DML 語句(INSERT、UPDATE 和 DELETE)定義 AFTER 觸發(fā)器。SQL Server 2005 可以就整個(gè)服務(wù)器或數(shù)據(jù)庫的某個(gè)范圍為 DDL 事件定義觸發(fā)器??梢詾閱蝹€(gè) DDL 語句(例如,CREATE_TABLE)或者為一組語句(例如,DDL_DATABASE_LEVEL_EVENTS)定義 DDL 觸發(fā)器。
在該觸發(fā)器內(nèi)部,您可以通過訪問 eventdata() 函數(shù)獲得與激發(fā)該觸發(fā)器的事件有關(guān)的數(shù)據(jù)。該函數(shù)返回有關(guān)事件的 XML 數(shù)據(jù)。每個(gè)事件的架構(gòu)都繼承了 Server Events 基礎(chǔ)架構(gòu)。
比如,在SQL Server 2005中,建立一個(gè)叫DDLTrTest 的數(shù)據(jù)庫,并且建立一個(gè)叫mytable的表
和Usp_Querymytable 的存儲(chǔ)過程,如下所示
- DROP DATABASE [DDLTRTEST]
- GO
- CREATE DATABASE DDLTRTEST
- GO
- USE [DDLTRTEST]
- GO
- IF EXISTS (SELECT * FROM SYS.OBJECTS
- WHERE OBJECT_IDOBJECT_ID = OBJECT_ID(N'[DBO].[MYTABLE]')
- AND TYPE IN (N'U'))
- DROP TABLE [DBO].[MYTABLE]
- GO
- CREATE TABLE MYTABLE(ID INT, NAME VARCHAR(100))
- GO
- INSERT INTO MYTABLE SELECT 1,'A'
- INSERT INTO MYTABLE SELECT 2,'B'
- INSERT INTO MYTABLE SELECT 3,'C'
- INSERT INTO MYTABLE SELECT 4,'D'
- INSERT INTO MYTABLE SELECT 5,'E'
- INSERT INTO MYTABLE SELECT 6,'F'
- GO
- USE [DDLTrTest]
- GO
- IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
- OBJECT_ID(N'[dbo].[usp_querymytable]')
- AND type in (N'P', N'PC'))
- DROP PROCEDURE [dbo].[usp_querymytable]
- GO
- CREATE PROC USP_QUERYMYTABLE
- AS
- SELECT * FROM MYTABLE
- GO
接下來定義一個(gè)DDL觸發(fā)器如下
- CREATE TRIGGER STOP_DDL_on_Table_and_PROC
- ON DATABASE
- FOR CREATE_TABLE,DROP_TABLE,
- ALTER_TABLE,CREATE_PROCEDURE,
- ALTER_PROCEDURE,DROP_PROCEDURE
- AS
- SELECT EVENTDATA().value
- ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
- 'nvarchar(max)')
- PRINT 'You are not allowed to CREATE,ALTER and DROP
- any Tables and Procedures'
- ROLLBACK;
接下來,我們嘗試如下的操作:
- ALTER TABLE MYTABLE ADD X INT
結(jié)果如下,出現(xiàn)錯(cuò)誤提示
- ALTER TABLE MYTABLE ADD X INT
- (1 row(s) affected)
- You are not allowed to CREATE,ALTER and DROP any Tables and Procedures
- Msg 3609, Level 16, State 2, Line 1
- The transaction ended in the trigger. The batch has been aborted.
再執(zhí)行SQL Server 2005DROP的操作,同樣觸發(fā)警告
- DROP TABLE MYTABLE
- (1 row(s) affected)
- You are not allowed to CREATE,ALTER and DROP any Tables and Procedures
- Msg 3609, Level 16, State 2, Line 1
- The transaction ended in the trigger. The batch has been aborted.
因?yàn)槲覀兊挠|發(fā)器規(guī)定了不能使用
- CREATE_TABLE,DROP_TABLE,
- ALTER_TABLE,CREATE_PROCEDURE,
- ALTER_PROCEDURE,DROP_PROCEDURE
等操作。 如果我們要關(guān)掉這個(gè)觸發(fā)器,可以這樣做: DISABLE TRIGGER STOP_DDL_ON_TABLE_AND_PROC
ON DATABASE 當(dāng)然,我們要對(duì)整個(gè)服務(wù)器采取策略的話,也是很簡單的,和上面的方法大致相同只不過將on database的參數(shù)改為on server,比如 CREATE TRIGGER
- STOP_DDL_on_Table_and_PROC
- ON ALL SERVER
- FOR CREATE_DATABASE,ALTER_DATABASE,DROP_DATABASE
- AS
- PRINT 'You are not allowed to CREATE,ALTER and DROP any Databases'
- ROLLBACK;
以上的相關(guān)內(nèi)容就是對(duì)SQL Server 2005中的DDL觸發(fā)器的介紹,望你能有所收獲。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流