SQL SERVER触发器同步

---触发器同步

/*
作者:邹建
*/

/*--同步两个数据库的示例

有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress

要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/

--大致的处理步骤
--1.在   srv1   上创建连接服务器,以便在   srv1   中操作   srv2,实现同步
exec   sp_addlinkedserver       'srv2 ', ' ', 'SQLOLEDB ', 'srv2的sql实例名或ip '
exec   sp_addlinkedsrvlogin    'srv2 ', 'false ',null, '用户名 ', '密码 '
go

--2.在   srv1   和   srv2   这两台电脑中,启动   msdtc(分布式事务处理服务),并且设置为自动启动
我的电脑--控制面板--管理工具--服务--右键   Distributed   Transaction   Coordinator--属性--启动--并将启动类型设置为自动启动
go


--3.实现同步处理

--a.在srv1..author中创建触发器,实现数据即时同步
--新增同步
create   trigger   tr_insert_author   on   author
for   insert
as
set   xact_abort   on
insert   srv2.库名.dbo.author(id,name,telphone)
select   id,name,telphone   from   inserted
go

--修改同步
create   trigger   tr_update_author   on   author
for   update
as
set   xact_abort   on
update   b   set   name=i.name,telphone=i.telphone
from   srv2.库名.dbo.author   b,inserted   i
where   b.id=i.id
go

--删除同步
create   trigger   tr_delete_author   on   author
for   delete
as
set   xact_abort   on
delete   b   
from   srv2.库名.dbo.author   b,deleted   d
where   b.id=d.id
go


--3.实现同步处理的方法2,定时同步

--在srv1中创建如下的同步处理存储过程
create   proc   p_process   
as
--更新修改过的数据
update   b   set   name=i.name,telphone=i.telphone
from   srv2.库名.dbo.author   b,author   i
where   b.id=i.id   and
(b.name <> i.name   or   b.telphone <> i.telphone)

--插入新增的数据
insert   srv2.库名.dbo.author(id,name,telphone)
select   id,name,telphone   from   author   i
where   not   exists(
select   *   from   srv2.库名.dbo.author   where   id=i.id)

--删除已经删除的数据(如果需要的话)
delete   b   
from   srv2.库名.dbo.author   b
where   not   exists(
select   *   from   author   where   id=b.id)
go


--然后创建一个作业定时调用上面的同步处理存储过程就行了

企业管理器
--管理
--SQL   Server代理
--右键作业
--新建作业
-- "常规 "项中输入作业名称
-- "步骤 "项
--新建
-- "步骤名 "中输入步骤名
-- "类型 "中选择 "Transact-SQL   脚本(TSQL) "
-- "数据库 "选择执行命令的数据库
-- "命令 "中输入要执行的语句:   exec   p_process   
--确定
-- "调度 "项
--新建调度
-- "名称 "中输入调度名称
-- "调度类型 "中选择你的作业执行安排
--如果选择 "反复出现 "
--点 "更改 "来设置你的时间安排


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

设置方法:
我的电脑--控制面板--管理工具--服务--右键   SQLSERVERAGENT--属性--启动类型--选择 "自动启动 "--确定.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值