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

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
SegmentFault 最新的问题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Attack and Defense Labs
Attack and Defense Labs
F
Full Disclosure
Vercel News
Vercel News
N
News | PayPal Newsroom
The GitHub Blog
The GitHub Blog
H
Hacker News: Front Page
H
Heimdal Security Blog
P
Privacy International News Feed
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cisco Blogs
L
Lohrmann on Cybersecurity
D
Docker
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
人人都是产品经理
人人都是产品经理
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Check Point Blog
博客园 - 叶小钗
Google Online Security Blog
Google Online Security Blog
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
S
Secure Thoughts
博客园 - Franky
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
P
Palo Alto Networks Blog
Latest news
Latest news
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Last Week in AI
Last Week in AI
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
T
Threatpost
T
Tenable Blog
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学

博客园 - Seer Lin

自己开发的ERP系统,有需要的联系 MSCRM2016 取消邮箱强制SSL 不听话的下属辞职记 Windows 7下,巧让家用UPS也支持电脑自动关机 海蜘蛛去广告 [转]SQL2008链接服务器数据同步 asp.net 在IE8 导出excel时的问题 win2008 R2 64位系统下配置DCOM权限 [转]excel 操作类 在excel中,将 长*宽*高 这样的格式列,拆分成3列 将没有产品图片的产品设置为不在前台显示SQL实现 [转]在Reporting Services报表中引用FTP站点上的图片 mscrm js webservic 常用功能 mscrm4.0 判断当前用户角色_示例 mscrm 4.0 获取当前用户角色 mscrm4.0 获取当前登录的用户名 mscrm4.0 用js调用Webservice vs2010 js 代码折叠插件 MSCRM 删除客户数据 MSCRM offline plugin开发注意事项
[转]mssql链接服务器
Seer Lin · 2011-06-01 · via 博客园 - Seer Lin

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来交互数据库。。。