比如我一个数据库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 本地表
以上操作都必须有管理员权限以及打开<允许远程访问>
网友评论