日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer2005數(shù)據(jù)庫中的DDL觸發(fā)器描述

以下的文章主要描述的是SQL Server 2005數(shù)據(jù)庫中的DDL觸發(fā)器,我們大家都知道SQL Server 2005數(shù)據(jù)庫中,其新增加了許多新的相關(guān)特性,其中的DDL觸發(fā)器可以說是個不錯的選擇,根據(jù)資料初步學(xué)習(xí)如下,現(xiàn)整理之:

成都創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元銅官做網(wǎng)站,已為上家服務(wù),為銅官各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

在SQL Server 2000中,只能為針對表發(fā)出的 DML 語句(INSERT、UPDATE 和 DELETE)定義 AFTER 觸發(fā)器。SQL Server 2005 可以就整個服務(wù)器或數(shù)據(jù)庫的某個范圍為 DDL 事件定義觸發(fā)器??梢詾閱蝹€ 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òu)都繼承了 Server Events 基礎(chǔ)架構(gòu)。

比如,在SQL Server 2005中,建立一個叫DDLTrTest 的數(shù)據(jù)庫,并且建立一個叫mytable的表

和Usp_Querymytable 的存儲過程,如下所示

 
 
 
  1. DROP DATABASE [DDLTRTEST] 
  2. GO 
  3. CREATE DATABASE DDLTRTEST 
  4. GO 
  5. USE [DDLTRTEST] 
  6. GO 
  7. IF EXISTS (SELECT * FROM SYS.OBJECTS 
  8. WHERE OBJECT_IDOBJECT_ID = OBJECT_ID(N'[DBO].[MYTABLE]') 
  9. AND TYPE IN (N'U')) 
  10. DROP TABLE [DBO].[MYTABLE] 
  11. GO 
  12. CREATE TABLE MYTABLE(ID INT, NAME VARCHAR(100)) 
  13. GO 
  14. INSERT INTO MYTABLE SELECT 1,'A' 
  15. INSERT INTO MYTABLE SELECT 2,'B' 
  16. INSERT INTO MYTABLE SELECT 3,'C' 
  17. INSERT INTO MYTABLE SELECT 4,'D' 
  18. INSERT INTO MYTABLE SELECT 5,'E' 
  19. INSERT INTO MYTABLE SELECT 6,'F' 
  20. GO 
  21. USE [DDLTrTest] 
  22. GO 
  23. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = 
  24. OBJECT_ID(N'[dbo].[usp_querymytable]') 
  25. AND type in (N'P', N'PC')) 
  26. DROP PROCEDURE [dbo].[usp_querymytable] 
  27. GO 
  28. CREATE PROC USP_QUERYMYTABLE 
  29. AS 
  30. SELECT * FROM MYTABLE 
  31. GO

接下來定義一個DDL觸發(fā)器如下

 
 
 
  1. CREATE TRIGGER STOP_DDL_on_Table_and_PROC
  2. ON DATABASE 
  3. FOR CREATE_TABLE,DROP_TABLE, 
  4. ALTER_TABLE,CREATE_PROCEDURE,
  5. ALTER_PROCEDURE,DROP_PROCEDURE
  6. AS 
  7. SELECT EVENTDATA().value
  8. ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
  9. 'nvarchar(max)')
  10. PRINT 'You are not allowed to CREATE,ALTER and DROP 
  11. any Tables and Procedures' 
  12. ROLLBACK;

接下來,我們嘗試如下的操作:

 
 
 
  1. ALTER TABLE MYTABLE ADD X INT 

結(jié)果如下,出現(xiàn)錯誤提示

 
 
 
  1. ALTER TABLE MYTABLE ADD X INT 
  2. (1 row(s) affected) 
  3. You are not allowed to CREATE,ALTER and DROP any Tables and Procedures 
  4. Msg 3609, Level 16, State 2, Line 1 
  5. The transaction ended in the trigger. The batch has been aborted. 

再執(zhí)行SQL Server 2005DROP的操作,同樣觸發(fā)警告

 
 
 
  1. DROP TABLE MYTABLE
  2. (1 row(s) affected)
  3. You are not allowed to CREATE,ALTER and DROP any Tables and Procedures
  4. Msg 3609, Level 16, State 2, Line 1
  5. The transaction ended in the trigger. The batch has been aborted.

因為我們的觸發(fā)器規(guī)定了不能使用

 
 
 
  1. CREATE_TABLE,DROP_TABLE, 
  2. ALTER_TABLE,CREATE_PROCEDURE,
  3. ALTER_PROCEDURE,DROP_PROCEDURE

等操作。 如果我們要關(guān)掉這個觸發(fā)器,可以這樣做: DISABLE TRIGGER STOP_DDL_ON_TABLE_AND_PROC

ON DATABASE 當(dāng)然,我們要對整個服務(wù)器采取策略的話,也是很簡單的,和上面的方法大致相同只不過將on database的參數(shù)改為on server,比如 CREATE TRIGGER

 
 
 
  1. STOP_DDL_on_Table_and_PROC
  2. ON ALL SERVER
  3. FOR CREATE_DATABASE,ALTER_DATABASE,DROP_DATABASE
  4. AS 
  5. PRINT 'You are not allowed to CREATE,ALTER and DROP any Databases' 
  6. ROLLBACK;

 以上的相關(guān)內(nèi)容就是對SQL Server 2005中的DDL觸發(fā)器的介紹,望你能有所收獲。


分享題目:SQLServer2005數(shù)據(jù)庫中的DDL觸發(fā)器描述
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/dhjggep.html