加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

SQL Server 2005中的DDL触发器的实现

发布时间:2018-09-01 17:36:36 所属栏目:电商 来源:站长网
导读:SQL SERVER 2005中,新增进了很多新的特征,个中的DDL触发器是个不错的选择,按照资料起源进修如下,现清算之: 在sql server 2000中,只能为针对表发出的 DML 语句(INSERT、UPDATE 和 DELETE)界说 AFTER 触发器。SQL Server 2005 可以就整个处事器或数
    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_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.

    再执行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;

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读