All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
.NET内置对象之Cache对象_[Asp.Net教程]
Apache小技巧五则_php资料_编程技术
C#教程:注册表概述
SQL注入漏洞全接触--入门篇_mssql学习_编程技术
讲述asp.net的DataReader与DataSet_[Asp.Net教程]
获取Web.Config文件中AppSetting_[Asp.Net教程]
用C#压缩和修复Access数据库_[Asp.Net教程]
net在cs程序中加入JS(背景不会变白)_[Asp.Net教程]
PHP语法中基本符号及使用方法_[PHP教程]
总结asp.net回发或回调参数无效解决方法_[Asp.Net教程]
Reading number is top 10 pictures
Photographed the passion of the clients and prostitutes in the sex trade picture1
Soong ching ling's former residence1
2015中美最新武器装备巅峰对决!
On the verge of extinction of the beach1
Summer is most suitable for young people to travel in China7
这才叫绝色美女2
乳娘帕梅拉安德森3
Born After 90 Beijing sports university campus flower photos2
全球十大灵异酒店
农夫山泉变身记
Download software ranking
Boxer's Top ten classic battle1
Unix video tutorial7
C#程序员参考手册
jdk1.5
1400篇各类破解文章
Tram sex maniac 2 (H) rar bag16
C#高级编程(第4版)
Boxer's Top ten classic battle5
SP4 for SQL2000
linux安装大全
归海一刀 published in(发表于) 2014/2/1 0:10:15 Edit(编辑)
Sql,server,2005数据库中的DDL触发器_[SQL,Server教程]

Sql,server,2005数据库中的DDL触发器_[SQL,Server教程]

Sql server 2005数据库中的DDL触发器_[SQL Server教程]

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
IFEXISTS (SELECT * FROM SYS.OBJECTS
WHERE OBJECT_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
IFEXISTS (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.


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

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;


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.