SqlServer之触发器

1.触发器之理论:

触发器(Trigger)是一种特殊类型的存储过程,是在用户对某一种表的数据进行
UPDATE、INSERT 和 DELETE 操作时被触发执行的一段程序。触发器有助于强制引用完
整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。

2.触发器工作原理:

① 触发器的名称。
② 触发器中进行的操作。
③ 触发器操作的执行过程。

3.创建触发器:

可以通过 CREATE TRIGGER 语句建立触发器,其语法格式为:

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]

{{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ][ NOT FOR REPLICATION ]
AS{batch| IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ]}

参数说明如下:

① trigger_name:触发器的名称。触发器名称必须符合标识符规则,并且在数据库中
必须唯一,可以选择是否指定触发器所有者名称。
② table | view:在其上执行触发器的表或视图,有时称为触发器表或触发器视图。
③ WITH ENCRYPTION:加密 syscomments 表中包含 CREATE TRIGGER 语句文本的
条目。
④ AFTER:指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激
发。如果仅指定 FOR 关键字,则 AFTER 是默认设置。不能在视图上定义 AFTER 触发器。
⑤ INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的
操作。在表或视图上,都可以定义一个 INSTEAD OF 触发器,但不能在 WITH CHECK
OPTION 的可更新视图上定义。
⑥ { [DELETE] [,] [INSERT] [,] [UPDATE] }:指定在表或视图上执行哪些语句时将激
活触发器的关键字,必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的
这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。
⑦ WITH APPEND:指定应该添加现有类型的其他触发器。只有当兼容级别是 65 或
更低时,才需要使用该可选子句。WITH APPEND 不能与 INSTEAD OF 触发器一起使用;
或者显式声明 AFTER 触发器,也不能使用该子句。
⑧ NOT FOR REPLICATION:当复制进程更改触发器所涉及的表时,不应执行该触
发器。
⑨ AS:触发器要执行的操作。

4.触发器实例:

Create Table Student(
          StudentNO int primary key,  --学号
            )

        Create Table COURSE(
           CourseNO int primary key,  --课程号
           StudnetID int,
            )

        使用触发器,更改学生学号,同步更改学生选课的课程号,
        Create Trigger tri_updateStudent
        On Student                       --在Studnet中创建触发器
        for Update                       --触发事件
        AS                               --事件触发后执行的事情
        if Update(SudentID)
        begin
        Update COURSE
        Set StudentID=i.StudentID
        From COURSE cr,Deleted d,Insert i    --Deleted和Inserted临时表
        Where cr.StudentID=d.StudentID

扩展阅读:

SQL触发器实例讲解:http://www.cnblogs.com/xianqingzh/archive/2009/04/30/1447143.html

DML触发器:http://msdn.microsoft.com/zh-cn/library/ms178110.aspx

时间: 2024-08-05 16:33:34

SqlServer之触发器的相关文章

SQLServer创建触发器,更新表

在SQLServer,触发器,插入.更新.删除状态: CREATE TRIGGER t_inms_alarms ON [PHS].[dbo].[AlarmCurrent] FOR INSERT, DELETE AS DECLARE @rows int SELECT @rows = @@rowcount IF @rows = 0 return --如果表是插入,则同步更新AlarmsMiddleTbl IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS

SqlServer的触发器

触发器是Sqlserver响应以下任意语句而自动执行的一天T-SQL语句.delete,insert,update.表和视图支持触发器.(但是临时表不支持). 我们在哪些业务场景需要用到触发器呢? 1.每当订购一个产品时,都从库存数量中减去订购的数量. 2.每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写. 1.首先,创建触发器.触发器用create trigger语句创建.下面是一个简单的例子: create trigger newproduct_trigge

在SQLServer使用触发器实现数据完整性

1.实现数据完整性的手段 在sqlserver中,在服务器端实现数据完整性主要有两种手段:一种是在创建表时定义数据完整性,主要分为:实体完整性.域完整性.和级联参照完整性:实现的手段是创建主键约束.唯一键约束.检查约束.默认值约束和各种级联完整性约束.另一种是通过编写触发器语句来实现,通过定义触发条件和编写触发后执行语句,来实现对数据表操作的各种约束. 2.触发器的概念 触发器是一种特殊的存储过程.通常用于实现强制业务规则和数据完整性.触发器是通过事件触发而由系统自动执行.主要体现在它在插入.删

[转帖]SQLSERVER 使用触发器实现 禁用sa用户 在非本机登录

原贴地址: https://blog.csdn.net/reblue520/article/details/51580102 具体的方法为: 创建一个触发器 CREATE TRIGGER forbiddensa ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN --选择sa用户进行限制: IF ORIGINAL_LOGIN()= 'sa' --允许sa在本机登录"" AND (SELECT EVENTDATA().value('

sqlserver的触发器练习实例

触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作. 下面直接上干货,创建insert触发器.delete触发器.DDL触发器和如何查看触发器定义 1.创建三个表学生表.班级表.课程表 create database student_score GO --在数据库中创建三个表学生表.班级表.课程表的结构 use student_score GO create table student ( stu_id char(8) primary key, stu_nam

sql server触发器实现插入时操作另一张表

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的 1.定义变量 #在mysql中变量直接这么定义就可以了 SET @VALUE = "111"; #在sql server中 declare @count int; #并赋值 set @count =0; #如果是查询,必须这么些 select @count = count(*) from WQ_MNINF_D_REAL where [email protected]; 2.判断 在mysql中,if判断的格式

MYSQL,DB2,SQLSERVER数据库不同点浅探(一)

简单地比较一下MYSQL,DB2,SQLSERVER数据库设计不同点,为日后看MYSQL源代码先打打底,今天先比较数据库对象吧: 1.DB2上关于表有一个表空间的概念,简单地说, 表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,一般来说一个表空间对应一个表.DB2在表空间上分配表空间对应表的一切物理属性,比如首次分配大小,扩展大小,页面每页初始空闲空间,空闲页面占总页面百分比等.因此,DB2上的系统DBA对表的操作更多是基于表空间上.比如因为表上的删改查不可避免地

sql学习--update

两种修改形式 第一种:静态插入 1 update #famousjaycess set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala' 2 where jc='johnny ca' 第二种: 1 --注意别名和on后边的表连接不要写错 2 update f set jc='johnny cash',occupation='Singe

SqlServer——触发器

一:触发器基本知识  触发器是一种特殊的存储过程,但没有接口(输入输出参数),触发器是引发它们的事务的一部分,因为SqlServer自动将引发它们的SQL语句和触发器作为一个隐式事务,因此当触发器正确执行后,事务才认为是完整的,触发器也可已在触发器内部通过 rollback tran 来回滚事务,当触发的SQL语句是隐式事务时,只回滚引发触发器的SQL语句和触发器:是显式事务时,将撤销从最外层 begin tran 开始的所有操作.所以触发器通常用来实现对表实施复杂的完整性约束和强制业务规则,它