您的位置:首页 > 数据库

SQL Server使用存储过程定时同步数据

2007-09-04 12:04 197 查看
SQL Server使用存储过程定时同步数据
发表于:2007-8-18 12:27:39 |分类:SQL Server |浏览(8) |评论(0) |引用(0) |天气:
· See also: http://topic.csdn.net/t/20060221/16/4568664.html http://www.orsoon.com/Article/Article_19615.html
最近做联通彩信的业务,有个彩信图片投票的项目,项目里面涉及了,短信、彩信和页面
三个方面,各自使用了不同的数据,于是有了数据交换和同步的问题,这里记录一下,我
彩信和页面数据同步的一个过程。
关于数据同步的问题,互联网上大都是采用SQL SERVER 的出版物、订阅的方式来处理
复制的;这里由于数据比较简单,仅仅是把彩信上行来的数据(两个表,一对多的关系)
提出来,插入到页面的数据库中的一个过程,所以,我没有使用上面提到的方式,而是写
了一个存储过程完成的同步,整个过程如下:
测试环境及同步要求:

有数据库服务器MMS和WEB,两台电脑能互相访问,有数据
服务器MMS.库名.MMS_RecvPrimaryInfo表:有字段:senderAddress,subject,createtime,transactionID
服务器MMS.库名.MMS_RecvDetailInfo表: 有字段CONTENT
服务器WEB.库名.UPMMS表: 有字段:DT,TITLE,UPDATETIME,transactionID

要求:
MMS.库名.MMS_RecvPrimaryInfo增加记录则WEB.库名.UPMMS记录增加
MMS.库名.MMS_RecvDetailInfo表中对应记录的部分数据更新到WEB.库名.UPMMS新增记录中

步骤:
1、在库MMS中建立视图,通过向导建立彩信两个表的一个视图,连接两个表的主键
SQL语句:
CREATE VIEW dbo.UNI_CWDS_View
AS
SELECT dbo.MMS_RecvPrimaryInfo.senderAddress, dbo.MMS_RecvPrimaryInfo.toAddress,
dbo.MMS_RecvPrimaryInfo.createtime, dbo.MMS_RecvPrimaryInfo.subject,
dbo.MMS_RecvDetailInfo.toFile, dbo.MMS_RecvDetailInfo.contentType,
dbo.MMS_RecvPrimaryInfo.transactionID
FROM dbo.MMS_RecvPrimaryInfo INNER JOIN
dbo.MMS_RecvDetailInfo ON
dbo.MMS_RecvPrimaryInfo.transactionID = dbo.MMS_RecvDetailInfo.transactionId
2、确定需要同步的字段,将这些字段的类型统一为完全相同
3、环境准备:
a.在MMS上创建连接服务器,以便在MMS中操作WEB,实现同步:
SQL语句:
exec sp_addlinkedserver 'web','','SQLOLEDB','60.xxx.xxx.xxx,2433'
exec sp_addlinkedsrvlogin 'web','false',null,'username','password'
go

b.在MMS和WEB这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动
我的电脑--控制面板--管理工具--服务--右键Distributed Transaction Coordinator
--属性--启动--并将启动类型设置为自动启动
go
4、实现同步处理的方法1:定时同步(存储过程sysn_unicwdd)
--同步数据存储过程 sysn_unicwdd
create proc sysn_unicwdd
as
--插入新增的数据
insert web.CWDDMMS_Vote.dbo.UPMMS(DT,TITLE,UPDATETIME,transactionID)
select distinct senderAddress,subject,createtime,transactionID from UNI_CWDS_View i
where toaddress='9800701' and not exists(
select * from web.CWDDMMS_Vote.dbo.UPMMS where transactionID=i.transactionID)
--更新修改过的数据
update b set CONTENT=i.toFile
from web.CWDDMMS_Vote.dbo.UPMMS b,UNI_CWDS_View i
where b.transactionID=i.transactionID and
contentType='text/plain'

update b set IMG=i.toFile
from web.CWDDMMS_Vote.dbo.UPMMS b,UNI_CWDS_View i
where b.transactionID=i.transactionID and
contentType like 'image%'
5、创建一个作业定时调用上面的同步处理存储过程就行了
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句: exec sysn_unicwdd
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排

然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性
--启动类型--选择"自动启动"--确定.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: