`

Sql Server2005 Transact-SQL 新兵器学习总结之-DDL触发器

阅读更多


1.简介:
Sql Server2005新增加了DDL触发器。
与DML触发器不同的是,它们不会为响应针对表或视图的UPDATE、INSERT或DELETE语句而激发。
相反,它们将为了响应各种数据定义语言(DDL)事件而激发。
这些事件主要与以关键字CREATE、ALTER和DROP开头的Transact-SQL语句对应。
执行DDL式操作的系统存储过程也可以激发DDL触发器。


2.作用:
如果要执行以下操作,可以使用DDL触发器:
(1)要防止对数据库架构进行某些更改。
(2)希望数据库中发生某种情况以响应数据库架构中的更改。
(3)要记录数据库架构中的更改或事件。


3.DDL 触发器作用域:
(1)数据库范围:数据库范围内的DDL触发器都作为对象存储在创建它们的数据库中。
(2)服务器范围:服务器范围内的DDL触发器作为对象存储在master数据库中。
例如:当数据库中发生CREATE TABLE事件时,都会触发为响应CREATE TABLE事件创建的数据库范围DDL触发器。
每当服务器上发生CREATE Index事件时,都会触发为响应CREATE Index事件创建的服务器范围DDL触发器。


4.与DML触发器比较不同处:
(1)DML触发器在INSERT、UPDATE和DELETE语句上操作。
(2)DDL触发器在CREATE、ALTER、DROP和其他DDL语句上操作。
(3)只有在完成Transact-SQL语句后才运行DDL触发器。DDL 触发器无法作为 INSTEAD OF 触发器使用。
(4)DDL触发器不会创建插入(inserted)的和删除(deleted)的表.但是可以使用EVENTDATA函数捕获有关信息。


5.例题:



--例题1
--
服务器范围的DDL触发器
IF EXISTS ( SELECT  *
            
FROM    sys.server_triggers
            
WHERE   name = 'TR_CREATEDATABASE' ) 
    
DROP TRIGGER TR_CREATEDATABASE ON ALL SERVER ;
GO

CREATE TRIGGER TR_CREATEDATABASE
ON ALL SERVER 
FOR CREATE_DATABASE 
AS 
    
PRINT 'Database Created'
    
PRINT CONVERT (nvarchar (1000),EventData())
GO

--创建数据库db1
CREATE DATABASE db1;


--收到下列消息
Database Created
<EVENT_INSTANCE><EventType>CREATE_DATABASE</EventType><PostTime>2008-09-01T20:17:35.170</PostTime><SPID>52</SPID><ServerName>YANFA0</ServerName><LoginName>YANFA0\Administrator</LoginName><DatabaseName>db1</DatabaseName><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>CREATE DATABASE db1;</CommandText></TSQLCommand></EVENT_INSTANCE>


--例题2
--
服务器范围的DDL触发器
IF EXISTS ( SELECT  *
            
FROM    sys.triggers
            
WHERE   name = N'TR_DROPINDEX'
                    
AND parent_class = 0 ) 
    
DROP TRIGGER [TR_DROPINDEX] ON DATABASE
GO

CREATE TRIGGER TR_DROPINDEX
ON DATABASE 
FOR DROP_INDEX
AS
    
PRINT 'DROP INDEX'
    
ROLLBACK
GO

--建立表
CREATE TABLE TableTest ( ids INT, i NVARCHAR(100) )
GO
--建立唯一索引
CREATE UNIQUE INDEX  index_TableTest 
ON TableTest ( ids )
GO
--删除索引
DROP INDEX index_TableTest
ON TableTest
GO



--收到下列消息
--我们从消息可以看到删除索引不成功!
DROP INDEX
消息 3609,级别 16,状态 2,第 2 行
事务在触发器中结束。批处理已中止。



--例题3
--
当不再需要某个DDL触发器时,可以禁用或删除该触发器。 
--
禁用DDL触发器不会将其删除。该触发器仍然作为对象存在于当前数据库中。
--
但是,当运行编写触发器程序所用的任何DDL语句时,不会激发触发器。
--
可以重新启用禁用的DDL触发器。
DISABLE TRIGGER [TR_DROPINDEX] ON DATABASE
GO
ENABLE 
TRIGGER [TR_DROPINDEX] ON DATABASE
GO

分享到:
评论

相关推荐

    SQL Server 2008的Transact-SQL語言增強

    Microsoft SQL Server 2008 對Transact-SQL 語言進行了進一步增強!这个是对SQL2008在T_SQL方面增强作了详细的介绍!

    标准SQL和transact-sql之比较学习

    在数据库管理领域,SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言,而Transact-SQL(T-SQL)则是SQL的一个扩展,由Microsoft为它的SQL Server数据库管理系统所特有。本篇文章将深入探讨...

    Beginning Transact-SQL with SQL Server 2000 and 2005 (4 of 5)

    Beginning Transact-SQL with SQL Server 2000 and 2005 byPaul TurleyandDan Wood Wrox Press 2006 (594 pages) ISBN:076457955X Prepare for the ever-increasing demands of programming....

    SQL Server 2008 Transact SQL Receipe

    ### SQL Server 2008 Transact-SQL Recipes #### 概述 SQL Server 2008 Transact-SQL Recipes 是一本专为数据库管理员、开发者以及任何希望深入理解 SQL Server 2008 中 Transact-SQL 功能的专业人士所编写的书籍。...

    SQL Server 2005 Beta 2 Transact-SQL 增强功能

    SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...

    SQL Server数据库应用与开发:第04章 Transact-SQL语言基础.ppt

    Transact-SQL语言是SQL Server 2005在SQL语言的基础上增加了一些语言要素后的扩展语言,其语言要素包括注释、变量、运算符、函数和流程控制语句等。掌握Transact-SQL语言是进一步学习更多的管理技术和数据库应用开发...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    本书主要聚焦于T-SQL(Transact-SQL)编程语言的使用,T-SQL是SQL Server使用的SQL方言,它不仅包括标准SQL的功能,还扩展了许多专为SQL Server设计的独特特性。T-SQL编程基础部分涵盖了以下内容: - **SQL语句语法...

    Beginning Transact-SQL with SQL Server 2000 and 2005 (2 of 5)

    Beginning Transact-SQL with SQL Server 2000 and 2005 byPaul TurleyandDan Wood Wrox Press 2006 (594 pages) ISBN:076457955X Prepare for the ever-increasing demands of programming. Beginning with an ...

    Transact-SQL参考(SQL Server 2000) 计算机专业电子书

    1. **基本语法**:学习如何使用Transact-SQL编写声明性语句,包括DML(Data Manipulation Language)如SELECT、INSERT、UPDATE和DELETE,以及DDL(Data Definition Language)如CREATE、ALTER和DROP,用于创建和修改...

    《Transact-SQL 权威指南》电子版(第一部分)

    Transact—SQL是结构化查询语言(SQL)的增强版本,与许多ANSI SQL标准兼容,Transact-SQL代码已成为SQL Server的核心。本书全面介绍了Transact—SQL,全书共21章,按照由浅入深的顺序,详细介绍了Transact-SQL...

    Inside Microsoft SQL Server 2008 T-SQL Programming

    T-SQL,即Transact-SQL,是SQL的一个扩展,主要用于微软的SQL Server系统中,用于数据查询、更新、插入和删除,以及复杂的存储过程和触发器的编写。 在SQL Server 2008版本中,T-SQL得到了许多增强和改进,这本书将...

    Beginning Transact-SQL with SQL Server 2000 and 2005 (1 of 5)

    Beginning Transact-SQL with SQL Server 2000 and 2005 byPaul TurleyandDan Wood Wrox Press 2006 (594 pages) ISBN:076457955X Prepare for the ever-increasing demands of programming. Beginning with an ...

    Writing Queries Using Microsoft SQL Server 2008 Transact-SQL

    ### 使用Microsoft SQL Server 2008 Transact-SQL 编写查询 #### 概述 本课程旨在为学生提供使用Microsoft SQL Server 2008中的Transact-SQL语言编写基本查询所需的技能与知识。课程结束后,学员将能够熟练地使用...

    《SQL Server 数据库》Transact-SQL程序设计实验报告.pdf

    《SQL Server 数据库》Transact-SQL程序设计实验报告主要关注了Transact-SQL语言的基础应用,涵盖了注释、变量、运算符、函数以及流程控制语句的使用。实验的目标是帮助学生掌握这些核心概念,并通过实际操作来提升...

    SQL.Server.2008.Transact-SQL.Recipes

    Transact-SQL不仅支持数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL),还提供了一系列扩展功能,如存储过程、触发器、函数等,这些功能极大地增强了SQL Server的功能性和灵活性。 #### 三、本书...

    sql server 2012 T-SQl基础教程 源码和示例数据库

    本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程。T-SQL是SQL Server开发者的核心技能,无论你是新手还是...

    Transact-SQL权威指南

    《Transact-SQL权威指南》是一本深入探讨SQL在数据库管理中的应用的书籍,主要针对Transact-SQL,这是Microsoft SQL Server所使用的SQL方言。本书旨在帮助读者掌握T-SQL的高级技巧,优化性能,并利用其强大的功能...

    [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版)

    SQL(Structured Query Language)是用于管理和处理关系数据库的强大工具,而T-SQL(Transact-SQL)是SQL Server的扩展,增加了诸如事务处理、存储过程和触发器等高级功能。对于SQL Server 2012,T-SQL的掌握至关...

    Transact-SQL用户指南Sybase

    Transact-SQL结合了SQL的标准特性与额外的功能,如事务处理、存储过程、触发器等,以支持更复杂的数据管理和应用开发需求。 #### 描述:Sybase Transact-SQL用户指南 用户指南旨在为数据库管理员、开发者和用户...

Global site tag (gtag.js) - Google Analytics