SQL Server 之 DB LINK

比如我一个数据库A想查询其他数据库B的数据 那么通过BDLINK可以实现

-- 创建链接服务器
 exec sp_addlinkedserver 'DB_name' ,'' ,'SQLOLEDB' ,'远程服务器名或ip地址'

 exec sp_addlinkedsrvlogin 'DB_name' ,'false' ,null , '用户名' ,'密码'
-- DB_name是别名 

用户必须有管理员权限,否则出现权限问题

-- 查询示例
select * from   DB_name.数据库.dbo.test1  

--导入示例
select* into 表from DNB_name.数据库名.dbo.test1

当不再使用的时候可以断开连接


exec sp_dropserver 'DB_name' ,'droplogins'

openrowset

连接远程/局域网数据(openrowset/openquery/opendatasource)
查询示例:

SELECT* FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)

--把数据拷贝到本地
SELECT  *  INTO 表 FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)

--把本地表导入远程表
INSERT openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名)SELECT  * FROM 本地表

--更新本地表 
UPDATE B  SET B.VALUE=A.VALUE FROM openrowset('SQLOLEDB' ,'sql服务器名' ;'用户名' ;'密码' , 数据库名.dbo.表名) AS A INNER JOIN 本地表 B ON A.column1= B.column1

openquery

首先创建一个连接创建链接服务器

--连接服务器
exec sp_addlinkedserver 'test_2' ,'' , 'SQLOLEDB' ,'远程服务器名或ip地址'

--查询
SELECT * FROM openquery(test_2,'SELECT * FROM 数据库.dbo.表名')

--把本地表导入远程表

 INSERT openquery(test_2,'SELECT * FROM 数据库.dbo.表名')SELECT * FROM 本地表

--更新本地表 
UPDATE B SET B.VALUE=A.VALUE FROM openquery(test_2, 'SELECT * FROM 数据库.dbo.表名') AS A INNER  JOIN 本地表  B ON  A.column1= B.column1

opendatasource/openrowset

SELECT* FROM opendatasource('SQLOLEDB' ,'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').数据库.dbo.表

--把本地表导入远程表

 INSERT opendatasource('SQLOLEDB' ,'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').数据库.dbo.表名 SELECT * FROM 本地表

以上操作都必须有管理员权限以及打开<允许远程访问>

你可能感兴趣的:(SQL Server 之 DB LINK)