惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - Amo

ecshop之transport和jquery冲突之完美解决方案 sql小知识(转载整理,逐步更新ing) SQL 断续排列 中国地址翻译 用P3P header解决iframe跨域访问cookie - Amo - 博客园 javascript捕获窗口关闭事件有两种方法 使用MagicAjax 服务器出现unable to find script library'/ajaxcallobject.js 控制 Flash Player 的 JavaScript 方法一览表 showModalDialog()、showModelessDialog()方法使用详解(转载) 功夫熊猫中乌龟大师说的几句经典台词 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园
跨服务器跨数据库操作
Amo · 2008-06-23 · via 博客园 - Amo

测试环境及同步要求:

有数据库服务器srv1和srv2,两台电脑能互相访问,有数据
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,实现同步
******************************注 意****************************************
***以dba用户执行以下两句脚本,(注意只有dba用户有权限执行以下脚本)***
exec sp_addlinkedserver 你的数据库连接名字 ,'','SQLOLEDB',你的数据库url及端口
exec sp_addlinkedsrvlogin 你的数据库连接名字,'false',null,数据库用户名,数据库用户密码
**************************************************************************
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

***************************************************************************************************************
来创建一个数据库连接对象,用来连接另一个数据库,然后在执行跨数据库操作时只需要在你要操作的表前加上 你的数据库连接名字.dbo.表明

例如:我有个库叫billing,有多个库叫subscription1,subscription2,subscription3.........,billing库中有个表叫SuspendRecord,subscrption 库中有个表叫ActivePlan
然后我要将subscription1 库中ActivePlan的phoneNumber收集到billing库的SuspendRecord表中,可以执行如下语句:
insert into SuspendRecord phoneNumber
select phoneNumber from 你的数据库连接名字.subscription1的库名.dbo.ActivePlan

注:创建数据库连接的语句只能被执行一次,如果数据库中存在聪明的连接对象,则再次创建同名的连接对象数据库就会报错,所以创建前需要检查是否存在同名的连接对象,方法如下
select name from sys.servers where name=数据库连接名称

建议:数据库连接名称生成规则:数据库连接地址+数据库名称+用户名+密码的hashCode作为连接名称,这样用户修改数据库用户名、密码等信息将不会对程序造成影响
***************************************************************************************************************