sql server 链接 MySql 实测经过_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2897 | 回复: 0   主题: sql server 链接 MySql 实测经过        下一篇 
xiaoyang
注册用户
等级:上士
经验:253
发帖:75
精华:0
注册:2011-10-19
状态:离线
发送短消息息给xiaoyang 加好友    发送短消息息给xiaoyang 发消息
发表于: IP:您无权察看 2014-12-17 10:08:03 | [全部帖] [楼主帖] 楼主

以下测试是在 xp sp3系统下,使用 sql server 2005 express 与 MySql 5.0

--通过odbc创建链接服务器
-- 方法1、在系统odbc数据源中 预先添加一个DSN名为MySQL_TestDB的数据源
--EXEC sp_addlinkedserver @server = 'MySQL_TestDB', @srvproduct='MySQL', @provider = 'MSDASQL', @datasrc = 'MySQL_TestDB'
--GO
-- 方法2、不在系统odbc数据源中数据源,直接写在配置参数中
EXEC sp_addlinkedserver @server = 'MySQL_TestDB', @srvproduct='MySQL', @provider = 'MSDASQL', @provstr = 'Driver={BMF MySQL ODBC Driver};Server=localhost;Database=testdb;User=root;Password=;Option=3;'
GO
EXEC sp_addlinkedsrvlogin @rmtsrvname='MySQL_TestDB',@useself='false',@locallogin='sa',@rmtuser='root',@rmtpassword=''
--删除链接服务器
exec sp_dropserver 'MySQL_TestDB' , 'droplogins'
--查询
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id name
----------- --------------------
35586 35586
35587 35587
35588 35588
.....
*/
--插入
insert OPENQUERY (MySQL_TestDB ,'select * from tb' ) select 1,2
--更新
update OPENQUERY (MySQL_TestDB ,'select * from tb' ) set name=3 where id=1
--删除
delete FROM OPENQUERY (MySQL_TestDB ,'select * from tb' ) where id=1
delete FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
--触发器中测试,大家比较关系如何同步
--建立测试环境
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb
GO
CREATE TABLE tb
(
id int identity,
code varchar(10),
name varchar(20),
CONSTRAINT PK_TB PRIMARY KEY (id)
)
GO
IF OBJECT_ID('tri_tb') IS NOT NULL DROP trigger tri_tb
GO
create trigger tri_tb
on tb
for insert , update ,delete
as
begin
if not exists(select 1 from deleted)
insert OPENQUERY (MySQL_TestDB ,'select * from tb' ) select id,code from inserted
else
if not exists(select 1 from inserted)
delete t from OPENQUERY (MySQL_TestDB ,'select * from tb' ) t,deleted d where t.id=d.id
else
update t
set name=i.code
from OPENQUERY (MySQL_TestDB ,'select * from tb' ) t,inserted i, deleted d
where i.id=d.id and i.id=t.id
end
go
--1 isnert
insert tb select 111,111
--第一次执行报错
/*
消息 8501,级别 16,状态 3,过程 tri_tb,第 8 行
服务器 'LANDSEA-8CC1455/SQLEXPRESS' 上的 MSDTC 不可用。
*/
--查看了一下系统服务,发现dtc的服务未启动 (Distributed Transaction Coordinator)
--将其启动后,再次执行,就没有问题,可能是我都是本机数据库,没有分布式的问题(我没有太多机器),
--这里很多人都遇到问题,对于这里的问题已经有很多人整理的很好了,我们可以参考:


[sql server] SQL Server 分布式数据库的问题和解决方法1

http://blog.csdn.net/xys_777/archive/2010/07/12/5729339.aspx


[sql server] SQL Server 分布式数据库的问题和解决方法2

http://blog.csdn.net/xys_777/archive/2010/07/12/5729334.aspx
--继续执行成功,为了显示了影响的行数,我故意没有在触发器中加 set nocount on,
/*
(1 行受影响)

(1 行受影响)
*/
--以下测试均很顺利
select * from tb
/*
id          code       name
----------- ---------- --------------------
1           111        111

(1 行受影响)

*/
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id          name
----------- --------------------
1           111

(1 行受影响)
*/
insert tb select 222,222 union select 333,333
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
--顺序有些乱
/*
id          name
----------- --------------------
2           222
3           333
1           111

(3 行受影响)
*/
update tb set code = 555
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
--顺序有些乱
/*
id          name
----------- --------------------
2           555
3           555
1           555

(3 行受影响)
*/
delete from tb where id=1
SELECT * FROM OPENQUERY (MySQL_TestDB ,'select * from tb' )
/*
id          name
----------- --------------------
2           555
3           555

(2 行受影响)
*/
----〉实际大家可以看出来上述方法,只要链接服务器改为其他任何数据库,皆通用。


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论