SQL Server触发器

一、触发器


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.存储过程可以不依附于表而单独存在,而触发器则必须依附于一个特定的表


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 47
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值