SQL Server触发器

原创 2013年12月04日 20:12:51

一、触发器


1.1定义


触发器是特殊的存储过程,主要通过事件进行触发而被执行


1.2特点


1.触发器是自动执行的,当对表中的数据作了任何修改之后立即激活。
2.触发器可以对数据库中的相关表进行级联更改

3.触发器可以实现被Check约束更复杂的数据完整性约束。


1.3创建


1.使用企业管理器创建触发器

                               


2.使用T-SQL语句创建触发器

                                


1.4实例

 机房收费系统里边。如果注册学生,向学生信息注册表里边添加学生信息(注册的时候,就会在卡里充一部分钱),如果是固定用户,需要在充值表里添加一条充值记录。如果是临时用户,就不需要再充值表里添加记录。

使用企业管理器创建的触发器:

-- =============================================
-- Author:		<>
-- Create date: <2013年12月4日>
-- Description:	<Stu_info表添加学生信息时。如果是固定用户,则Stu_Regcharge表添加充值信息,如果是临时用户,则不添加充值信息>
-- =============================================
ALTER TRIGGER [dbo].[RegisterStudent] /* 定义触发器的名称*/
   ON  [dbo].[Stu_Info]               /*操作表为学生信息注册表*/
   AFTER Insert                       /*触发事件为插入*/
AS 

	DECLARE @stuCardNO char(20),     /*定义插入充值表的参数*/
		@stuType char(20),
		@stuAmount char(20),
		@stuRechargeDate char(20),
		@stuRechargeTime char(20),
		@stuRechargeUser char(20)
        
	SELECT @stuCardNO = CardNO,@stuType = stuType,@stuAmount=CurrentBalance,@stuRechargeDate=RegisterDate,@stuRechargeTime = RegisterTime,@stuRechargeUser =RegisterUser FROM INSERTED /*将插入的记录,选出插入充值表需要的值赋值给参数*/
			
	IF(@stuType='固定') /*如果是固定用户,将注册时充值的金额,写入充值表中*/
		BEGIN
			INSERT INTO stu_Recharge (CardNO,RechargeAmount,RechargeDate,RechargeTime,RechargeUser,IsCheckOut) values (@stuCardNO,@stuAmount,@stuRechargeDate,@stuRechargeTime,@stuRechargeUser,'未结账')
		END



其实,之前还有一个条件判断语句:
IF(@stuType='临时')
		BEGIN
			ROLLBACK TRANSACTION
		END
主要是想如果是‘临时’用户,就不会添加充值记录。结果,学生信息也不能写入学生信息注册表了。再一看条件判断,如果是‘临时’的,学生信息注册表插入这个事件中途回滚,造成学生信息不能注册。只要将它删除就可以。

学习触发器、存储过程之前,问了学过的同学,对存储过程、触发器有了大致的了解。后来查些资料、看他们的博客,尝试做。贾林师傅、温欢、汤长海师哥,在他们给我讲的时候,我发现一个共性的东西:我以前听过存储过程、触发器,现在学习它,遇到问题了,卡了就解决这个问题,但是三个师哥,这个问题在师哥手里处理的时候,他们都会提到需求、用户。把我学习的问题,都当作了实战,佩服。

1.5注意

1.表进行更新,触发器开始执行里边定义的内容。所以触发器比较灵活,不好控制。
2.对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序。

1.6比较触发器、存储过程

1.存储过程与触发器是SQL Server中的两类数据库对象。它们都是由T-SQL语句编写而成的过程
2.存储过程是由用户根据需要调用执行的,而触发器则是由某个动作(如删除或修改一条记录)引发执行的。
3.存储过程可以不依附于表而单独存在,而触发器则必须依附于一个特定的表


版权声明:本文为博主原创文章,未经博主允许不得转载。

sql server触发器工作原理

  • 2012年08月23日 13:40
  • 1.03MB
  • 下载

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

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的 1.定义变量 #在mysql中变量直接这么定义就可以了 SET @VALUE = "111"; #在sql serv...
  • luo4105
  • luo4105
  • 2016年05月08日 19:23
  • 2786

SQL server 触发器实例

  • 2011年03月15日 23:20
  • 46KB
  • 下载

oracle 和 SQL Server触发器创建、删除、修改、查看示例

ORACLE触发器的删除,修改,插入以及详细介绍 DML触发器的创建   创建DML触发器需要CREATE TRIGGER系统权限。创建DML触发器的语法如下:   CREATE [OR...
  • Kelat
  • Kelat
  • 2012年11月16日 09:52
  • 2006

MySQL同SQL Server触发器同步两张表实现方法

以下新增同步为例,更新删除方法一样,都是用一个用户变量标识判断防止触发器递归...
  • roy_88
  • roy_88
  • 2016年08月06日 17:43
  • 1564

SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的问题

最近弄了一个小项目,也不是很复杂,需要将一个数据库的一些数据备份到另外一个库,不是本地,可能是网络上其他的数据库,想了一下,用了存储过程和触发器。也不是很复杂,首先我需要操作远程数据库,于是写了一个存...
  • ysblue
  • ysblue
  • 2015年07月24日 15:57
  • 1226

SQL Server 2005 用触发器跟踪表操作

--> 测试数据:[a] if object_id('[a]') is not null drop table [a] go create table [a]([ID] int,[品名] varch...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server触发器
举报原因:
原因补充:

(最多只允许输入30个字)