关于利用触发器实现自动对远程数据库写入数据方法的探讨

时间:2022-10-12 07:12:57

【摘要】矿名 Char(20) 状态 Int(4) 正常状态为“1”,服务器中断则为“0” 时间 Datetime(8) 网络状态 Int(4) 正常状态为“1”,服务器中断则为“-1” 汇总时间 Datetime(8) 短...

关于利用触发器实现自动对远程数据库写入数据方法的探讨

【摘要】不同数据库之间的数据自动同步及写入功能作为数据库应用中比较重要的一项功能一直为大家所重视,本文通过一个利用触发器实现煤矿瓦斯数据中断后自动发送短信提醒的实例展示如何实现自动对远程数据库写入数据记录一个独特的方法,通过对此方法的探讨为大家提供一种新颖的思路。

【关键词】煤矿企业;触发器;远程数据库;写入数据;短信提醒

一家大型煤炭企业,下属十多个煤矿,该煤炭企业有煤矿安全生产实时监测与监管系统(以下简称安全监控系统),该系统可实现各矿瓦斯数据的上传;还有一个短信平台系统,两个系统使用的都是SQL SERVER数据库,部署在不同的服务器上。现在想要实现安全监控系统中若瓦斯数据上传中断则自动给指定的手机发送短信,短信要写明瓦斯中断煤矿名称及中断时间和中断情况。

安全监控系统中有一张表“实时通讯汇总显示”,为各矿通讯状态实时显示,结构如下:

字段名 字段类型 说明

矿名 Char(20)

状态 Int(4) 正常状态为“1”,服务器中断则为“0”

时间 Datetime(8)

网络状态 Int(4) 正常状态为“1”,服务器中断则为“-1”

汇总时间 Datetime(8)

短信平台系统可以指定的手机发送短信,短信发送程序是每隔一定的时间对表sm_sms进行一次扫描,若表sm_sms里有内容,再根据接收人的手机号向外进行发送,同时把已发送的记录自动插入到表sm_smsoutlog中。若接收用户回复短消息,则系统自动把回复的内容插入到表sm_smsin中,因此,只需要把要发送的内容按照表的结构插入到sm_sms表中即可,这样,短信即可正常发送出去。

短信平台系统中表sm_sms的结构如下:

字段名 字段类型 说明

lsh Int(4) NOT NULL 插入的记录编号

nr Varchar(200) NOT NULL 发送内容

jssjh Char(15) NOT NULL 接收手机号

jrrq Smalldatetime(4) YES 接收日期

fsrq Smalldatetime(4) YES 发送日期

fsbz Char(2) NOT NULL 发送标志(插入时,一定要置“否”字)

ly Char(16) YES 可为NULL

实现方法:

根据情况,此数据写入量不大但是有偶发性即不是定期写入,拟通过触发器来实现。在安全监控系统中的“实时通讯汇总显示”表中做一触发器,要求“实时通讯汇总显示”表一旦有矿的状态和网络状态出现中断的情况即朝短信平台系统中的sm_sms表中插入一条记录,以实现瓦斯中断即发送短信的功能。

首先应该使两个异地的数据库建立联接,在安全监控系统服务器上的SQL Server数据库中,在“安全性”-“链接服务器”中新建一个名为“KYSMS”的远程服务器链接,指向短信平台服务器,如图1所示。

在“常规”选项卡中,数据源选择“其它数据源”中的“Microsoft OLE DB Provider for SQL Server”,然后在下面的“数据源”输入框中填入短信平台服务器的IP地址,在“目录”输入框中输入sm_sms表所在的数据库名称,如图2所示。

在“安全性”选项卡中,“本地登陆”填本地服务器SQL Server数据库的用户名,“远程用户”和“远程密码”中分别填写短信平台服务器的SQL Server数据库的用户名和登陆密码。然后选择“用此安全上下文进行:”,并且在下面的“远程用户”和“远程密码”中分别填写短信平台服务器的SQL Server数据库的用户名和登陆密码,如图3所示。

最后一步,在“服务器选项”卡中,选中“RPC”和“RPC输出”这两项,默认的只选中了“数据访问”和“使用远程排序规则”这两项,也就是说一共要选中四项,如图4所示。

然后点击确定,至此远程数据库联接建立完毕。

接下来我们再进行另一步更为重要的步骤:制作触发器

找到我们要制作触发器的表,即瓦斯上传服务器中的“实时通讯汇总显示”表,在该表上单击右键,选择“所有任务”-“管理触发器”,如图5所示。

在“文本”框中输入触发器内容,如图6所示。

触发器中的文本内容如下:

CREATE trigger 实时通讯中断触发器1

on 实时通讯汇总显示

FOR INSERT UPDATE

as

declare @矿名 char(20),@状态 int,@时间 datetime,@网络状态 int,@汇总时间 datetime

begin

set @矿名= (select [矿名] from Inserted )

set @状态= (select [状态] from Inserted )

set @时间= (select [时间] from Inserted )

set @网络状态= (select [网络状态] from Inserted )

set @汇总时间= (select [汇总时间] from Inserted )

if (@状态 = 0 or @网络状态 = -1)

begin

set XACT_ABORT ON

insert into KYSMS.kysms.dbo.sm_sms([lsh],[nr],[jssjh],[fsbz]) values(193753,’[‘+ltrim(@矿名)+’]’+’通讯中断,’+’服务器状态:’+cast(ltrim(@状态) as char(2))+’,’+’网络状态:’+cast(ltrim(@网络状态) as char(2))+’,’+’时间:’+cast(ltrim(@时间) as char(18)),’134********’,’否’)

insert into KYSMS.kysms.dbo.sm_sms([lsh],[nr],[jssjh],[fsbz]) values(193754,’[‘+ltrim(@矿名)+’]’+’通讯中断,’+’服务器状态:’+cast(ltrim(@状态) as char(2))+’,’+’网络状态:’+cast(ltrim(@网络状态) as char(2))+’,’+’时间:’+cast(ltrim(@时间) as char(18)),’133********,’否’)

insert into KYSMS.kysms.dbo.sm_sms([lsh],[nr],[jssjh],[fsbz]) values(193755,’[‘+ltrim(@矿名)+’]’+’通讯中断,’+’服务器状态:’+cast(ltrim(@状态) as char(2))+’,’+’网络状态:’+cast(ltrim(@网络状态) as char(2))+’,’+’时间:’+cast(ltrim(@时间) as char(18)),’189********’,’否’)

set XACT_ABORT OFF

end

end

说明:

1.declare @矿名 char(20),@状态 int,@时间 datetime,@网络状态 int,@汇总时间 datetime 这一句定义变量。

2.set @矿名= (select [矿名] from Inserted )

……

set @汇总时间= (select [汇总时间] from Inserted )设置变量名。

3.SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

4.insert into KYSMS.kysms.dbo.sm_sms(...)中,“KYSMS.kysms.dbo.sm_sms”用于联接远程SQL Server数据库中的表sm_sms,其中第一个KYSMS指我们前面建立的数据库联接(为便于区分也可以起其他名字),第二个kysms指sm_sms表所在的数据库名。对应每一个手机号写一条insert插入语句。

设置该触发器之后,如果遇到瓦斯数据上传中断,则指定的手机会收到一条内容为:“[某矿]通讯中断,服务器状态:0(或1),网络状态:-1(或1),时间:** * **** *:**AM(或PM)”的短信。

通过使用触发器,实现了煤矿瓦斯数据上传中断时及时通过手机短信提醒的功能。瓦斯作为大多数煤矿事故的元凶其数据值极为重要,通过此功能的实现可以使相关人员在第一时间掌握到影响煤矿安全生产的瓦斯数据上传中断的情况,及时发现及时处理,为信息化提升安全生产提供了坚实的保证。

参考文献

[1]Jiawei Han.数据挖掘:概念与技术(原书第3版)[M].机械工业出版社,2012.

[2]赛奎春.SQL Server数据库开发实例解析[M].机械工业出版社,2006.

[3]德莱尼.深入解析SQL Server 2008[M].人民邮电出版社,2009.

[4]赵辉,陆冷飞.SQL Server触发器在保持数据库完整性中的应用[J].电脑开发与应用,2007.

[5]魏锦茂.SQL触发器在数据库设计中的应用[J].电脑编程技巧与维护,2010.

[6]黄汛,程治刚.数据库连接池技术的应用研究[N].武汉大学学报(工学版),2002.

[7]俞建,张燎军.数据库访问技术研究[J].计算机与现代化,2004.

上一篇:浅析指挥控制系统的一体化发展思想 下一篇:大数据环境下数字图书馆建设的发展战略研究