关闭

SQL Server触发器

标签: SQL Server触发器
1428人阅读 评论(53) 收藏 举报
分类:

一、触发器


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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:223273次
    • 积分:7357
    • 等级:
    • 排名:第3300名
    • 原创:106篇
    • 转载:3篇
    • 译文:1篇
    • 评论:1349条
    文章分类
    最新评论