以下的文章主要描述的是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触发器的介绍,望你能有所收获。
在使用Windows 7的时候很多用户对于系统的很多功能并不是很了解,也正是因为这样的不了解导致很多用户在使用Win 之后并不能体验Windows 7的功能便携和强大功能,导致很多用户对于Windows 7的认识还是比较模糊,不过为了让更多的朋友了解Windows 7的特点和便携应用,今天就为大家汇...
假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...
ubuntu14.04应用窗口列表在哪里?在ubuntu下打开个几个应用窗口最小化后怎么切换呢,应用窗口列表在哪里呢? 1、多打开几个chrome浏览器窗口。 2、然后都做最小化处理。 3、现在我们在桌面左边的面板上找到"左右两边有小白点"的chrome浏览器应用图标,这就是chr...
问:我在Windows 7 Ultimate X64下播放电影视频时,不管什么格式都会蓝屏,错误代码“0x00000124”。换解码器、播放器不行,换驱动、内存也不管用。在不同的电脑上也试过,仍然蓝屏。请问是哪里的问题,如何解决 答:64位 Windows 7直接使用PotPlayer x64就...
Windows 7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列表、平铺等方式显示。但是,假如你对N个文件夹视图进行了风格各异的个性设置,现在又想让所有文件夹都使用同一种视图怎么办呢 手工一个一个修改,你OUT了,非累得手抽...
经常听见有人说用Windows 7玩网络游戏的时候网络延时比较高,也就是ping比平时xp的时候高一点,一直找不到原因,很苦恼。今天我们终于找到理由了,原来是Windows 7的一个服务在作怪,这个服务叫:Multimedia Class Scheduler,就是这个服务让我的PING如此高,问题是...