select主键字段名from inserted open cursor1 fetch next from cursor1 into @TempSerialno while @@fetch_status=0 begin insert into PositionTable(TableName,SerialName,Serialno,OpType) values( @TableName,@
select主键字段名from inserted
open cursor1
fetch next from cursor1 into @TempSerialno
while @@fetch_status=0
begin
insert into PositionTable(TableName,SerialName,Serialno,OpType)
values( @TableName,@SerialName,@TempSerialno,@OpType)
fetch next from cursor1 into @TempSerialno
end
close cursor1
deallocate cursor1
end
if (@OpType=3 and @Trans=1)--delete删除
begin
declare cursor1 cursor for
select主键字段名from deleted
open cursor1
fetch next from cursor1 into @TempSerialno
while @@fetch_status=0
begin
insert into PositionTable(TableName,SerialName,Serialno,OpType)
values( @TableName,@SerialName,@TempSerialno,@OpType)
fetch next from cursor1 into @TempSerialno
end
close cursor1
deallocate cursor1
end
事实上,在对数据表执行插入(Insert)、更新(Update)、删除(Delete)操作之后,可分别为其编写插入触发器、更新触发器、删除触发器[7],但由于要实现的功能类似,都是往PositionTable表中写定位信息,因此将其写在一个触发器中,若实现的功能不同,则可分别写在三个触发器中,以适应实际应用的需要。
以上触发器的功能已通过系统的阶段测试和集成测试,符合预定的业务规则,运行稳定。
2.3 数据实时上传线程的设计
管理系统启动后,开启新线程定时查询PositionTable表中有无记录,若有则根据定位信息提取出对应表中的记录,将获取的记录与定位信息一起写入文本文件并打包,然后通过网络通信模块发送到管理中心,管理中心对数据包解压后读取数据并根据定位信息导入管理中心数据库对应的表中,主要流程如图2所示。
值得注意的是,由于在数据实时传输的过程中,加油数据依然源源不断地被系统采集并写入数据库,所以此时PositionTable表中也有新的记录写入,因此,为了区分信息定位表中原有的记录和新写入的记录,在前端代码中使用了一个int型的数组nId[]来保存已经写入文本文件的定位信息的Id号,当上传成功后,遍历该数组,将PositionTable表中对应的记录删除,即将原有的记录删除,而新写入的记录则在下次定时时间到后得到处理。
这里用到了多线程与网络通信技术,但其不是本文讨论的重点,如有需要请查阅相关资料。
3 结束语
在系统的开发过程中,上述触发器所实现的功能完全可以借助编程工具通过前端代码来实现,但与之相比,采取触发器的方式具有以下几方面的优势:
1)不必为需要上传的表添加bool型的标记字段来记录该行是否已上传,即不需要改变被操作表的结构,PositionTable表中保存了未上传记录的定位信息,即使网络出现故障,这些信息也不会丢失,待网络恢复正常后,系统立刻将数据上传;
2)易于新增需要上传的数据表,无需重新编写前端代码,只需为新增的表编写对应的触发器即可,使系统功能的扩展变得十分简便;
3)使得前端代码的编写能够集中在一个较小的范围之内,并且有效减少了代码的编写量,有利于程序的升级与维护。
触发器的使用让数据上传部分的整个设计变得简洁而高效,系统的可扩展性和可维护性均得到提高。虽然触发器能够提高系统的开发效率,但是也不要过多使用,并且不要将触发器设计得过于复杂,否则不但起不到预期的效果,反而会造成数据库和应用程序维护困难。
本文所提到的利用触发器进行数据实时传输的方式已经应用在连锁加油站管理系统中,该系统已被某加油集团安装使用。
参考文献:
[1] 刘卫宏.SQL Server 2000实用教程[M].北京:科学出版社,2003.
[2] 程志梅,邱霞明,王晓燕.SQL Server2000数据库中触发器的妙用[J].计算机应用与软件,2009(3).
[3] 金玉明.SQL Server中触发器的应用[J].电脑知识与技术,2005(35).
[4] 刘俊姝.浅谈SQL-SERVER数据库中的游标、存储过程和触发器[J].计算机与信息技术,2005(9).
[5] Elmasri R,Navathe S B.数据库系统基础[M].邵佩英,徐俊刚,王文杰,译.5版.北京:人民邮电出版社,2008:61-75.
[6] 陈琴.SQL触发器的应用[J].电脑知识与技术,2010(35).
[7] 张峰,张莉莉.触发器在数据处理过程中的应用研究[J].计算机工程与科学,2008(5).
(责任编辑:南粤论文中心)转贴于南粤论文中心: http://www.nylw.net(南粤论文中心__代写代发论文_毕业论文带写_广州职称论文代发_广州论文网)
顶一下
(1)
100%
踩一下
(0)
0%
版权声明:因本文均来自于网络,如果有版权方面侵犯,请及时联系本站删除.