当前位置:首页 > 系统运维 > 正文内容

SQL Server 2005数据库中的DDL触发器描述

a8116255316年前 (2010-06-30)系统运维8

以下的文章主要描述的是SQL Server 2005数据库中的DDL触发器,我们大家都知道SQL Server 2005数据库中,其新增加了许多新的相关特性,其中的DDL触发器可以说是个不错的选择,根据资料初步学习如下,现整理之:

在SQL Server 2000中,只能为针对表发出的 DML 语句(INSERT、UPDATE 和 DELETE)定义 AFTER 触发器。SQL Server 2005 可以就整个服务器或数据库的某个范围为 DDL 事件定义触发器。可以为单个 DDL 语句(例如,CREATE_TABLE)或者为一组语句(例如,DDL_DATABASE_LEVEL_EVENTS)定义 DDL 触发器。

在该触发器内部,您可以通过访问 eventdata() 函数获得与激发该触发器的事件有关的数据。该函数返回有关事件的 XML 数据。每个事件的架构都继承了 Server Events 基础架构。

比如,在SQL Server 2005中,建立一个叫DDLTrTest 的数据库,并且建立一个叫mytable的表

和Usp_Querymytable 的存储过程,如下所示

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 

接下来定义一个DDL触发器如下

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  

结果如下,出现错误提示

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.  

再执行SQL Server 2005DROP的操作,同样触发警告

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. 

因为我们的触发器规定了不能使用

CREATE_TABLE,DROP_TABLE,   ALTER_TABLE,CREATE_PROCEDURE,  ALTER_PROCEDURE,DROP_PROCEDURE 

等操作。 假如大家要关掉这个触发器,可以这样做: DISABLE TRIGGER STOP_DDL_ON_TABLE_AND_PROC

ON DATABASE 当然,大家要对整个服务器采取策略的话,也是很简单的,和上面的 *** 大致相同只不过将on database的参数改为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; 

以上的相关内容就是对SQL Server 2005中的DDL触发器的介绍,望你能有所收获。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/21361.html

分享给朋友:

“SQL Server 2005数据库中的DDL触发器描述” 的相关文章

各个都很实用:windows 7系统电脑日常小技巧

各个都很实用:windows 7系统电脑日常小技巧

在使用Windows 7的时候很多用户对于系统的很多功能并不是很了解,也正是因为这样的不了解导致很多用户在使用Win 之后并不能体验Windows 7的功能便携和强大功能,导致很多用户对于Windows 7的认识还是比较模糊,不过为了让更多的朋友了解Windows 7的特点和便携应用,今天就为大家汇...

windows 7系统件夹和文件都不显示名字如何解决

windows 7系统件夹和文件都不显示名字如何解决

假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04应用窗口列表在哪里?在ubuntu下打开个几个应用窗口最小化后怎么切换呢,应用窗口列表在哪里呢? 1、多打开几个chrome浏览器窗口。 2、然后都做最小化处理。 3、现在我们在桌面左边的面板上找到"左右两边有小白点"的chrome浏览器应用图标,这就是chr...

Windows7播放电影视频蓝屏无论什么格式都会蓝屏

Windows7播放电影视频蓝屏无论什么格式都会蓝屏

问:我在Windows 7 Ultimate X64下播放电影视频时,不管什么格式都会蓝屏,错误代码“0x00000124”。换解码器、播放器不行,换驱动、内存也不管用。在不同的电脑上也试过,仍然蓝屏。请问是哪里的问题,如何解决 答:64位 Windows 7直接使用PotPlayer x64就...

windows7系统下让所有文件夹都使用同一种视图的方法

windows7系统下让所有文件夹都使用同一种视图的方法

Windows 7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列表、平铺等方式显示。但是,假如你对N个文件夹视图进行了风格各异的个性设置,现在又想让所有文件夹都使用同一种视图怎么办呢 手工一个一个修改,你OUT了,非累得手抽...

windows 7玩网游PING高即网络延时比较高的解决方法

windows 7玩网游PING高即网络延时比较高的解决方法

经常听见有人说用Windows 7玩网络游戏的时候网络延时比较高,也就是ping比平时xp的时候高一点,一直找不到原因,很苦恼。今天我们终于找到理由了,原来是Windows 7的一个服务在作怪,这个服务叫:Multimedia Class Scheduler,就是这个服务让我的PING如此高,问题是...