我们使用的数据表,有些时候并不都是在本地的数据库上,如果要调用,这时候就必须连接远程的数据库了。
要连接远程的数据库,我们必须知道的信息包括,IP地址,端口号(如果没改过的话,可以省略,用逗号列出),登录名,登录密码。
我们假设有一个架设在IP地址为192.168.0.3的数据库DB_test,这个数据库包含一个名为Table_A的表,该表有一个名为ID的自增主键,登录名:sa,密码:sa
下面就是具体的连接步骤:
1、注册
因为如果远程的数据库没有注册在本地,是不可以连接的。(具体注册的信息可以用:select * from sys.servers来查看)
要连接的数据库必须在sys.servers中存在,才可以连接。
注册需要两个系统存储过程,
sp_addlinkedserver 和
sp_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 远程数据库 连接