您的位置:首页 > 数据库

SQL语句实现连接远程的数据库

2011-05-16 09:48 399 查看
我们使用的数据表,有些时候并不都是在本地的数据库上,如果要调用,这时候就必须连接远程的数据库了。



要连接远程的数据库,我们必须知道的信息包括,IP地址端口号(如果没改过的话,可以省略,用逗号列出),登录名登录密码



我们假设有一个架设在IP地址为192.168.0.3的数据库DB_test,这个数据库包含一个名为Table_A的表,该表有一个名为ID的自增主键,登录名:sa,密码:sa



下面就是具体的连接步骤:



1、注册

因为如果远程的数据库没有注册在本地,是不可以连接的。(具体注册的信息可以用:select * from sys.servers来查看)

要连接的数据库必须在sys.servers中存在,才可以连接。



注册需要两个系统存储过程,sp_addlinkedserversp_addlinkedsrvlogin。从名称可以看出,这两个存储过程的作用就是添加地址和添加登录信息。sp_addlinkedserver可以创建多种数据库的映射,包括excel。

exec sp_addlinkedserver '注册名可以自定义', ' ', 'SQLOLEDB ', '远程服务器名或ip地址(最好用IP)'
exec sp_addlinkedsrvlogin '必须和上面的注册名一样', 'false ',null, '用户名', '密码'

所以注册写法为

exec sp_addlinkedserver 'DBTest', '', 'SQLOLEDB', '192.168.0.3'
exec sp_addlinkedsrvlogin 'DBTest', 'false',null, 'sa', 'sa'

2、查询
注册时候我们就可以按照select * from 注册名.数据库名.dbo.表名的方法查询了。
例如:select * from DBTest.DB_test.dbo.Table_A实现查询。

3、删除注册

exec sp_dropserver '注册名称', 'droplogins' ,注册名称可以使用select [name] from sys.servers来选择
例如:exec sp_dropserver 'DBTest', 'droplogins'

4、操作远程数据库的表
如果仅能select可能远远不能满足我的需要,有时我们可能需要能够对远程的表数据进行增加、删除和修改。
我们需要一个sql方法openquery(),语法是openquery( '注册名','查询语句' )

sql连接丛书对这个方法的解释为:
对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。openquery 可以在查询的 from 子句中引用,就好象它是一个表名。openquery 也可以作为 insert、update 或 delete 语句的目标表进行引用。但这要取决于 OLE DB
访问接口的功能。尽管查询可能返回多个结果集,但是 openquery 只返回第一个。

那也就是说,利用这个方法我们就可以实现对远程数据库表的操作。下面举几个例子。

查询:
除了上面的查询方法,用openquery同样可以实现查询
select * from openquery(DBTest, 'select * from DB_test.dbo.Table_A')--不过有些繁琐,不实用

增加:
--将本地A表数据添加到远程的Table_A中

insert into openquery(DBTest, 'select * from DB_test.dbo.Table_A')
select * from A

删除:
delete from openquery(DBTest, 'select * from DB_test.dbo.Table_A') where ID='1'--where后直接跟远程表的字段名

修改:
update openquery(DBTest, 'select * from DB_test.dbo.Table_A') set ID='2' where ID='1'

PS:发现了一个同样是说这个问题的博客,把这个博客的地址列出来,让大家有多一点儿的了解:sql 远程数据库 连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: