`
ywChen
  • 浏览: 121151 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

T-SQL 触发器

SQL 
阅读更多

触发器是一种特殊类型的存储过程,与表格紧密相连。

 

触发器的一般功能如下:

 

        (1)级联修改数据库中的表。

 

        (2)执行比检查约束更为复杂的约束操作。

 

        (3)拒绝或回绝违反引用完整性的操作。

 

        (4)比较表修改前后数据之间的区别。

 

创建触发器前,需遵守以下规则:

 

         (1)CREATE TRIGGER 语句必须是批处理中的第一个语句,且改批处理中随后出现的其他所有语句都将被解释为CREATE TRIGGER语句定义的一部分。

 

 (2)每一个触发器都是一个数据对象,因此其名称必须遵守标识符的命名规则。

 

         (3)在默认情况下,创建触发器的权限讲分配给数据表的所有者,且不可以讲该权限转移给其他用户。

 

 (4)虽然触发器可引用当前数据库以外的对象,但只能在当前数据库中创建触发器。

 

 (5)虽然不能在临时数据表上创建触发器,但可引用临时数据表。

 

         (6)既不能在系统数据表中创建触发器,也不可以引用系统数据表。

 

         (7)在包含使用DELETE或UPDATE操作所定义的外键的表中,不能定义INSTEAD OF 和 INSTEAD OF UPDATE。

 

 (8)虽然TRUNCATE TABLE 语句类似于不包含 where 子句的DELETE语句,但它不会引发DELETE触发器。

 

         (9)WRITETEXT语句不会引发INSERT或UPDATE触发器。

 

         (10)下面的语句不能创建触发器:ALERT DATABASE,CREATE DATABASE,DISK INIT,DISK INSIZE,DROP DATABASE,LOAD DATABASE,LOAD LOG,RECONFIGURE,RESTORE DATABASE,RESTORE LOG。

 

 

 

创建触发器格式如下:

 

 

CREATE TRIGGER[owner,]trigger_name

    On[owner,]table_name

    [WITH ENCRYPTION]

    {

    FOR{[INSERT][,UPDATE][,DELETE]}

    [NOT FORREPLICATION]

    AS sql_statements

    }
 

 


    在上述语句中:


    ① trigger_name:为创建的触发器名称,它必须遵守SQL Server的命名规则,而且同一个数据库中不允许出现触发器名称相同的情况。


    ② table_name:为该语句中定义的触发器所基于的表,也称为触发表。


    ⑧ WITH ENCRYPTION选项:SQL Server将触发器的定义文本保存在系统分类表 syscomments中,选用此项要求SQL Server对该触发器定义文本进行加密存储,以防止第三方用户从syscomments表中读取该触发器定义文本的内容。


    ④ NOT FOR REPLICATION选项:说明在复制过程中出现修改触发表数据时,触发器不被激活。


    ⑤ FOR{[INSERT][,UPDATE][,DELETE]}:定义触发器的触发事件。当某一个触发器由表中的多个事件触发时,可以在INSERT、UPDATE、DELETE之间使用“,”符号作为间隔符来组合表示。


    ⑥sql_statements:定义触发器在触发事件发生时(被激活时)所要执行的操作。

 

 

 创建触发器的第二种定义格式中的触发事件仅限于INSERT和UPDATE。其语法格式为:

 

 

 

CREATE TRIGGER[owner,]trigger_name
     
        On[owner,]table_name

        [WITH ENCRYPTION]

        {

          FOR{[INSERT][,UPDATE]}

    [NOT FOR REPLICATION]

          AS

            {IF UPDATE(column)

            [{AND|OR}UPDATE(column)]

            |

            IF(COLUMNS UPDATED(){bitwise_operator}updated_bitmask

    {comparison_operator column_bitmask}

             sql_statements

            }

        }
 

 


    在第二种格式中,需要用IF子句进一步说明触发器的触发条件仅限于IF语句中指定的列值被修改。IF子句指定的被修改列有以下两种格式:


        IF UPDATE(column)[{AND|OR}UPDATE(column)]


    和


        IF(COLUMNS_UPDATED(){位运算符)updated_bitmask(L[较运算符 column_bitmask)其中:


    ①column:指明激活触发器的触发条件中其数据将被INSERT或UPDATE操作修改的列。


    ②updated bitmask:定义了各位的位屏蔽值。


    ⑧column bitmask:定义了各待检测列的位屏蔽值的值。各列的屏蔽位为该列在触发表中的序号。


④COLUMNS_UPDATED():用来检测指定列的列值是否被插入或修改。需要用位运算符、比较运算符和 updated_bitmask(各位的位屏蔽值)、column__bitmask(各待检测列的位屏蔽值的值)等几个参数一起说明待检测列。假如一个触发表中有5个待检测列,则各列对应的屏蔽位为1~5,对应的位屏蔽值为20~24。例如,要在触发器中检测列1和列3的列值是否被修改的IF子句为: IF(COLUMNS UPDATED()&(1+4))<>0


注意:在使用WITH ENCRYPTION选项时需要注意两点:一是原始触发器的文件丢失,将不能从syscomments表中重新保存加密文本;二是文本加密后,在数据库升级为新版本时不能修改,也不能重新存入新版本中。也就是说,如果触发器文本有可能需要修改,就不要随便将其加密。

 

【例】创建一个触发器,当新增一条学生记录时打印信息

 

IF EXISTS(SELECT name FROM sysobjects where name='stu_tr' and type='TR' )
  DROP TRIGGER stu_tr
GO
CREATE TRIGGER stu_tr ON dbo.student
FOR  INSERT
AS 
 PRINT '新增一位学生'
GO

INSERT dbo.student VALUES('CC','女','C1',20)

GO
 

 

 

 

 

 

 

分享到:
评论

相关推荐

    T-SQL触发器_图文.精选.pptx

    T-SQL触发器_图文.精选.pptx

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

    《SQL Server 2012 T-SQL基础教程——源码与示例数据库》 本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程...

    Microsoft SQL Server2005技术内幕:T-SQL查询(中文PDF版)part1

     通过本书,你将深入了解t-sql的高级用法,包括触发器、用户自定义函数、异常处理等。该书解释并比较了sql server 2000和sql server 2005在数据库开发相关问题上的解决方案,深入讨论了sql server 2005中新增的t-...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    它不仅覆盖了T-SQL编程的基础知识,还深入探讨了许多高级主题,如存储过程、触发器、函数等,同时还提供了大量的性能优化技巧和最佳实践建议。对于希望提升自己SQL Server技能的开发者和DBA来说,这是一本非常有价值...

    Inside Microsoft SQL Server 2008 T-SQL Programming

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

    Microsoft SQL Server 2008技术内幕:T-SQL查询_源代码及附录.zip

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威书籍。T-SQL是SQL Server数据库管理系统的核心语言,用于数据操作、查询、存储过程编写以及...

    T-SQL-API 中文帮助文档

    **T-SQL触发器** 触发器是一种特殊的存储过程,当特定的DML(Data Manipulation Language)操作(如INSERT、UPDATE或DELETE)发生时自动执行。它们可以用来实现复杂的业务规则,如审计跟踪或级联更新。 **T-SQL...

    Microsoft SQL Server 2008技术内幕:T-SQL查询.pdf

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威指南。T-SQL是微软SQL Server数据库管理系统的核心语言,用于数据操作、查询、存储过程编写以及...

    T-SQL用户指南&T-SQL用户手册打包下载

    T-SQL不仅仅是SQL的基础语法,它还提供了更丰富的功能,如流程控制、变量定义、函数使用、存储过程以及触发器等,使得数据库管理与开发更为高效和灵活。 1. **基本查询语句**:T-SQL的基础在于查询,SELECT语句用于...

    触发器使用原理和常用T-SQL截取字符串操作

    结合"触发器的使用案例.txt"和"T-SQL触发器的使用",我们可以看到如何将触发器与T-SQL字符串操作结合,例如在触发器中使用SUBSTRING和CHARINDEX来分析和验证新插入或更新的数据。 总的来说,理解和熟练运用触发器...

    Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码

    《Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中用于数据操作、查询、存储过程...

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

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

    MICROSOFT SQL SERVER 2008技术内幕:T-SQL语言基础.pdf

    不过,我可以根据标题和描述提供的信息,以及对SQL Server 2008和T-SQL语言基础知识的理解,为您构建一份关于Microsoft SQL Server 2008中T-SQL语言基础知识的知识点概要。 Microsoft SQL Server 2008是微软公司...

    Microsoft SQL Server 2008 T-SQL Fundamentals

    在T-SQL中,存储过程和触发器是两个重要的高级概念。它们允许用户编写可重用的代码块,并在特定事件发生时自动执行。存储过程可以提高效率,减少网络流量,而触发器则可以实现数据的完整性约束。书中的这部分内容将...

    《T-SQL 2008 入门》[PDF]

    《T-SQL 2008 入门》是一本专为初学者设计的教程,旨在帮助读者掌握T-SQL语言的基础和高级概念。T-SQL(Transact-SQL)是SQL Server数据库管理系统中用于数据查询、更新和管理的核心语言。这本书通过详细讲解语法和...

    Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询.part1

    在SQL Server 2005中,T-SQL的重要性不言而喻,它是进行数据操作、存储过程编写、触发器创建以及复杂查询的核心工具。 本书首先会介绍T-SQL的基础概念,包括SELECT语句的基本用法,如何从一个或多个表中检索数据,...

    17套T-SQL试题

    T-SQL包含许多高级功能,如存储过程、触发器、函数(内置和用户定义)、视图、事务和批处理。存储过程是预编译的SQL代码集合,可提高性能和代码重用;触发器允许在数据更改前后自动执行操作;函数可以返回单个值或...

    Microsoft SQL Server 2005 技术内幕:T-SQL程序设计(CHM格式)

    通过本书,你将深入了解T-SQL的高级用法,包括触发器、用户自定义函数、异常处理等。该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-...

    T-SQL学习资料(CSDN下载)集合

    T-SQL(Transact-SQL)是微软对SQL标准的扩展,它是SQL SERVER的主要查询语言,用于数据操作、存储过程、触发器和函数的编写。在SQL SERVER 2005中,T-SQL的重要性不言而喻,它是数据库管理和开发的核心工具。 "第6...

    T-SQL示例大全,一个很不错的SQL示例,更快速掌握SQL,推荐使用。

    T-SQL,全称Transact-SQL,是微软SQL Server数据库管理系统中使用的SQL方言,它扩展了标准SQL的功能,提供了数据库交互、数据操纵和程序编写的能力。本资源“T-SQL示例大全”是一个非常宝贵的参考资料,对于学习和...

Global site tag (gtag.js) - Google Analytics