SQL Server中多行数据更新的触发器应用研究
2010-09-05邓景顺
邓景顺,黄 杰
(山西大同大学数学与计算机科学学院,山西大同 037009)
SQL Server中多行数据更新的触发器应用研究
邓景顺,黄 杰
(山西大同大学数学与计算机科学学院,山西大同 037009)
触发器是一种特殊的存储元件,它可以方便地基于一个表的数据更新,自动更新其他相关表的记录,以保证数据的完整性.文章通过开发实例,阐述SQL Server中多行数据更新的触发器处理方法.
SQL Server 多行数据更新 触发器
1 问题的提出
数据更新操作有三种:向数据表中添加记录、修改记录、删除记录.在SQL Server触发器应用中,大家对由一个记录更新操作激活的触发器讨论较多,而对一次更新操纵多个记录陈述较少.本文重点在于,使用SQL Server 2005中的DML触发器[1],阐述多行数据更新的触发器处理方法.
本文使用的数据库其中数据表及结构为:
学生表:XSB(学号,姓名,专业,总学分,…)
课程表:KCB(课程号,课程名,专业,学分,…)
成绩表:CJB(学号,课程号,成绩)
其中XSB中总学分,应为学生所选成绩合格(>=60分)的课程,对应的学分之和.
多行数据的更新举例:
INSERT INTO XSB SELECT*FROM XSB1.
DELETE FROM XSBWHERE学号<'050001'.
UPDATE CJB SET成绩=成绩+10WHERE课程号='206'.
类似这些操作都会引起数据表中一行或多行记录的更新操作.由这些操作引发的触发器设计要比一个记录时的情况复杂.
2 触发器工作原理
触发器是一个被指定关联到一个表的数据对象,触发器是不需要调用的,当对一个表的特别事件出现时(如INSERT、UPDATE、DELETE等),它就被激活[2].
SQL Server 2005中,按照触发事件的不同可经将触发器分为两大类:DML触发器和DDL触发器.当DML触发器被执行时,系统创建了两个特殊的逻辑表:inserted表和deleted表:
inserted表:当向表中插入数据时,INSERT触发器触发执行,新的记录插入到触发器表和inserted表中.
deleted表:用于保存已从表中删除的记录,当触发一个DELETE触发器时,被删除的记录存放到deleted表中.
修改一条记录等于插入一条新记录,同时删除旧记录.当对定义了UPDATE触发器的表记录修改时,表中原记录移到deleted表,修改过的记录插入到inserted表及被修改的表中.
这两个表总是与被触发的表有相同的结构,存储在系统内存中,不允许用户对其修改,但用户可以引用表中数据,当触发器完成工作时,二表也被系统删除[3,4].
在本文下面的方法中,都用到以上二个系统表.此外还会用到自定义的临时表,用后需删除.
3 触发器应用方法
1)XSB中插入一批不同专业新生后,应该根据这些学生的专业,在CJB中自动生成这些学生应选课程记录(学号,课程号),成绩一列暂空.实现数据的自动填充.用XSB上的数据插入触发器实现:
2)修改KCB数据表中某些课程的学分,必然引起XSB中总学分数据的不一致,应该自动更新XSB中总学分,保持数据一致性.用KCB上的数据更新触发器实现:
此方法特点是只针对更新学分的课程,把修改后的学分增量反映到总学分中,对学生本次操作以前的总学分并不作检查和更新,处理问题相对灵活.
3)当向CJB中插入多行记录后,应该根据学生的成绩给出对应的XSB中总学分更新.用CJB上的数据插入触发器实现:
4)当向CJB中删除多行记录后,应该根据学生的成绩给出对应的XSB中总学分更新.用CJB上的数据删除触发器实现:
5)当修改CJB中部分学生的成绩后,应该在XSB中的总学分中得到体现.用CJB上的数据更新触发器实现:
此处需注意,及格分改为及格分,不及格分改为不及格分,并不改变学分;只有当及格分改为不及格分或相反,才影响学分.
4 触发器应用总结
触发器是一种特殊的存储过程,它可以方便地基于一个表的修改,自动更新其他相关表的记录,以保证数据的完整性.本文就多行数据更新操作的触发器在数据库的应用,作了部分研究,主要方法是先将相关数据存入临时数据表,再从临时数据表中提取数据更新到指定数据表.数据的更新采用增量更新,对更新前的数据不作检查,只反映本次操作所致的数据改变.希望本文提供的方法对其它数据库的开发能有参考价值.
[1]郑阿奇.SQLServer实用教程[M].北京:电子工业出版社,2009.
[2]王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.
[3]孙晓宁.SQL Server 2005中触发器的应用[J].中国科技信息,2008(1):73-74.
[4]张峰,张莉莉.触发器在数据处理过程中的应用研究[J].计算机工程与科学,2008(05):156-158.
An Applied Study on the Trigger of the M ulti-line Data Update in SQL Server
DENG Jing-shun,HUANG Jie
(School ofMathematics and Computer Science,ShanxiDatong University,Datong Shanxi,037009)
A trigger is a special kind of stored procedure that can be executed automatically to update records in related tables based on datamodifications in a table in order to ensure the data integrity.In this article we shall discuss the application method to the trigger of themulti-line data update in SQL Server via a development example..
SQL Server;Multi_line Data Update;trigger
TP392
A
〔编辑 高海〕
1674-0874(2010)02-0005-03
2009-12-03
邓景顺(1964-),男,山西大同人,副教授,研究方向:数据库.