mssql mysql服务端_[转]mssql链接服务器

mssql version:sql server 2008

mysql

version:mysql-5.1.32

1,安装MSDASQL

--安装MSDASQL(64 位 OLEDB Provider for

ODBC

(MSDASQL))

--http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=zh-cn

--select

the version WindowsServer2003.WindowsXP-KB948459-v2-x64-ENU.exe

2,安装mysql

odbc

--mysql-connector-odbc-5.1.6-winx64.msi

3,外围应用配置器,注册网络

EXEC

sp_configure 'show advanced option',1

RECONFIGURE

go

exec sp_configure

'Ad Hoc Distributed

Queries',1

GO

RECONFIGURE

GO

4,建立MYSQL链接服务器

--用于从mysql获取数据

EXEC

master.dbo.sp_addlinkedserver

@server = N'MYSQL',

@srvproduct=N'MySQL',

@provider=N'MSDASQL',

@provstr=N'DRIVER={MySQL ODBC 5.1 Driver};

SERVER=ip; DATABASE=dbname; USER=username; PASSWORD=password;

OPTION=3'

SELECT * FROM OPENQUERY(MYSQL,'SELECT id,name FROM

test.user');

insert into openquery(MYSQL,'select id,name from test.user where

1=0') values (5,'newUser');

5,建立MSSQL链接服务器

exec sp_addlinkedserver

'MSSQL', '', 'SQLOLEDB', 'tcp:ip\hostname,1433'

go

exec

sp_addlinkedsrvlogin  'MSSQL', 'false',null, 'username',

'password'

go

select * from openquery(MSSQL,'select id,name from

test.dbo.[user]')

go

==================

2、数据库的访问以及操作链接数据库建立后,就可以对链接数据库进行访问,普通方法有2种:

(1)T-SQL方式 select * from

[链接表名称].[数据库名].[架构].[表名]

ACCESS一般使用: select * from

[链接表名称]...[表名] (数据库名和架构都没)

MSSQL 一般使用: select * from

[链接表名称].[数据库名].[dbo].[表名]

Oracle 一般使用: 据说是 select * from

[链接表名称]..[Oracle用户名].[表名] (我没试成功过。。)(2)PL/SQL方式

使用OpenQuery交互(虽然不是最好的,但速度比第一种方法至少快一半)查询实例:Select * from OpenQuery(连接服务器名称,'Select * from

[表名]')

新增实例:

INSERT OPENQUERY (链接服务名称, 'SELECT

字段1,字段2 FROM 表') VALUES ('值1', '值2');

顺便提下:OPENQUERY

会返回一个数据集,换言之上面的语句,必须要等表所有数据都select后才会插入数据,如果数据量大这个过程非常漫长,所以上面的语句需要改进下:

INSERT

OPENQUERY (链接服务名称, 'SELECT 字段1,字段2 FROM 表 where 1=2')

VALUES ('值1', '值2');

更新实例:

UPDATE OPENQUERY

(链接服务名称, 'SELECT 字段1,字段2 FROM 表 WHERE id=1') SET 字段1= '值1', 字段2= '值2';

删除实例:

DELETE OPENQUERY (链接服务名称, 'SELECT 字段1 FROM 表 WHERE

字段1=1');

(以上所有操作实例如果链接的服务器是MSSQL,则需要在表名前添加数据库和架构,如:数据库名.dbo.表名)

另外关于引号的小问题也提下,虽然简单但有时候也容易忽略,比如:

Select

* from OpenQuery(连接服务器名称,'Select * from [表名] where id=1')

这样没问题,但如果id是字符那么应该是

Select * from OpenQuery(连接服务器名称,'Select * from [表名] where

id=''值''') 需要在一前一后加2个 ' ,如果中间的语句再复杂些,或者引入函数等,需要拆开写,那前后就需要加4个'

,反正原则就是引一次加2个',其实也就是转义。

3、同义词的的使用(仅SQL2005及以上版本支持!)

这个东东很好!很强大!

(OPENQUERY其实也就是它的简化版)

创建语句:

CREATE SYNONYM [同义词名称] FOR

[链接服务器名称].[数据库].[架构].[表名]

GO

我的个人理解是,首先通过链接服务器创建远程链接,再通过链接服务器创建同义词到本地数据库,这样一来在本地数据库上就相当于创建了虚拟表(支持4种对象的创建:表、视图、函数、存储过程),远程的表就像在本地一样,所以同义词翻译成链接表或者链接对象似乎更为恰当。。

这样一来,操作远程数据库就非常方便了,不管是ACCESS、SQL、还是Oracle(估计其他数据库链接过来也是一样的道理,前提是需要有相应的访问接口)都可以使用最普通的T-SQL语句操作,如:

select

* from 同义词名称

insert into 同义词名称(...) values(...)

delete 同义词名称

where...

(当然需要执行增加、删除、修改等操作,需要你相对应的链接服务器有相应的权限)

这样一来前面提到的2种访问链接数据库的方式通通都可以放弃,不过可惜的是如果是SQL2000的话,仍然只能使用OpenQuery来交互数据库。。。

--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值