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 sever 2008 触发器的问题

CREATE TRIGGER Insert_Or_Update_Sal    BEFORE INSERT OR UPDATE ON Teacher    FOR EACH ROW    AS B...
  • hhooong
  • hhooong
  • 2015年05月14日 15:38
  • 1086

[SQL Server] 多触发器执行问题

问题描述: 在某环境中数据表存在多个触发器,数据的增删改是标准的每个表都有的触发器,此外还存在关于校验的触发器;起因是写完触发器后,有一次同事询问说触发器不起作用了,没有提示错误,但是数据无法保存;我...
  • xiaoxu0123
  • xiaoxu0123
  • 2010年03月20日 00:13
  • 811

SQL Server 触发器学习总结

SQL菜鸟入门级教程之触发器     触发器简介:   触发器(trigger)是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发,事件大家应该非常熟悉吧,比如按钮的Cli...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年03月12日 12:18
  • 1756

SQL Server 2005/2008 触发器的管理和查看

通过可视化操作来管理和查看触发器 在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项。 通过...
  • wozengcong
  • wozengcong
  • 2014年08月23日 14:26
  • 736

SQL Server 触发器的使用,实现多字段自增长

今天遇到了个数据库的问题:主键ID字段自增长,编号Number字段自增长,但是SQL Server只支持一个自增长字段,那该怎么解决呢? 这时候就要用到了SQL Server的触发器功能了,废话不多...
  • yedajiang44
  • yedajiang44
  • 2017年05月25日 21:33
  • 457

如何屏蔽sqlServer触发器

我做的程序有时涉及大批量地将其他数据源的数据合并到Sqlserver数据库,这时候想不让触发器运行,否则回非常耗时,十分容易导致超时。  特请教: 该怎么暂时屏蔽触发器呢? 如能屏蔽,如何恢复正常呢?...
  • Tercel99
  • Tercel99
  • 2008年04月10日 22:59
  • 1584

SqlServer触发器的一个例子

先抄一点关于触发器的文字介绍: 在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的有三种:分别应用于Insert , ...
  • u013992365
  • u013992365
  • 2016年12月19日 15:39
  • 4202

一次SQLSERVER触发器编写感悟

背景:BOSS需要我写一个工厂采集端到服务器端的数据同步触发器,数据库采用的是sqlserver2008 需求:将多台采集机的数据同步到服务器中,如果采集端数据库与服务器数据库连接失败则将数据保存到...
  • u013046841
  • u013046841
  • 2015年08月21日 02:34
  • 2981

[SQL SERVER系列]存储过程,游标和触发器实例[原创]

自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int declare @U...
  • peng8477
  • peng8477
  • 2016年05月13日 10:20
  • 613

避免SQL Server 触发器死循环

        在使用SQL Server时,有时候希望针对数据表中某一字段的修改执行一段触发器代码,比如修改了人员名称时,我们希望数据库会自动执行一代码来修改同一数据表中的姓名拼音首字母字段。如果使...
  • chris_mao
  • chris_mao
  • 2008年03月12日 10:47
  • 4886
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server触发器
举报原因:
原因补充:

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