链接服务器 不同服务器查询,插入数据

最近用到了从另一个服务器插入数据到本地,使用了链接服务器,做一个链接服务器总结。


从服务器把用户表 user 的数据插入到本地的 user 表

--创建链接服务器

EXEC sp_addlinkedserver '链接服务器名称','','SQLOLEDB','IP地址' 

/*

例如:EXEC sp_addlinkedserver 'Linked','','SQLOLEDB','192.0.0.1' 

*/


EXEC sp_addlinkedsrvlogin '链接服务器名称','false',null,'账户名','密码'

/*

例如:EXEC sp_addlinkedsrvlogin 'Linked','false',null,'sa','123'

*/


--还可以使用windows验证方式登录,没试过。。。(当前用户账户密码和服务器一致,似乎是- - ...)


-- 查询示例
select *  from 链接服务器名称.数据库.dbo.表名 


/*例如:
 select *  from LinkName.Test.dbo.dept   
 */


-- 导入本地表示例
select * into 本地表 from 链接服务器名称.数据库.dbo.表名 


/*例如:
 select * INTO DEPT from LinkName.TestDB.dbo.dept   
 */



-- 以后不再使用时删除链接服务器 如果指定 droplogins,则在删除链接服务器之前要删除登录名映射

exec sp_dropserver 'LinkName' , 'droplogins' 



-- 查询示例
select *  from 链接服务器名称.数据库.dbo.表名 


/*例如:
 select *  from LinkName.Test.dbo.dept   
 */


-- 导入本地表示例
select * into 本地表 from 链接服务器名称.数据库.dbo.表名 


/*例如:
 select * INTO DEPT from LinkName.Test.dbo.dept   
 */


 --更新
 update LinkName.Test.dbo.dept set deptid = 值 wehre 字段名 = '条件' 
 
 
 --删除
 delete LinkName.Test.dbo.dept where 字段名 = '条件'




 
-- 通过行集函数(OPENQUERY/OPENROWSET/OPENDATASOURCE)操作方法



-- OPENQUERY 需要使用链接服务器


--查询示例
SELECT * FROM OPENQUERY(Linked,'select * from 数据库名.架构名.表名')
 /* 
 示例:
SELECT * FROM OPENQUERY(Linked,'select * from Test.dbo.dept ')
  */
 
 
 --插入数据
INSERT OPENQUERY(LinkName, 'SELECT *  FROM 数据库名.架构名.表名') (列,列...)
    SELECT 列,列... FROM 本地表
/* 
 示例:
INSERT OPENQUERY(Linked,'select * from Test.dbo.dept ') (deptid,deptname)
SELECT DEPTID,DEPTNAME FROM DEPT
  */


--更新本地表
 UPDATE OPENQUERY(LinkName, 'SELECT * FROM 数据库名.架构名.表名')  SET 字段='值' WHERE 字段='条件'
/* 
 示例:
 UPDATE OPENQUERY(LinkName, 'SELECT * FROM Test.dbo.dept ')  SET DeptName='小辛' WHERE DeptId=1
 */
 
 
 --删除示例
 DELETE OPENQUERY(LinkName, 'SELECT * FROM 数据库名.架构名.表名')  WHERE 字段名='条件'
/* 
 示例:
 DELETE OPENQUERY(LinkName, 'SELECT * FROM Test.dbo.dept')  WHERE DeptName = '小辛'
 */
 
 
 
 
 --函数 OPENROWSET (不需要链接服务器)


--查询示例
SELECT * FROM OPENROWSET ( 'SQLOLEDB' , 'SERVER=IP地址' ; '用户名' ; '密码',数据库名.架构名.表名 )
 
 --或者
 SELECT * FROM OPENROWSET ( 'SQLOLEDB' , 'SERVER=IP地址' ; '用户名' ; '密码','SELECT * FROM Test.dbo.dept' )
 
 --插入,更新,删除 请参考 OPENQUERY方法使用




 
--OPENDATASOURCE方法(不需要用到链接名。如果连接的实例名不是默认的,需要在"sql服务器名或IP地址"后加上"/实例名")

 

SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'server=sql服务器名或IP地址;uid=用户名;pwd=密码').数据库名.架构名.表名


--或者
SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Date Source=sql服务器名或IP地址;uid=用户名;pwd=密码').数据库名.架构名.表名
/* 
例如:
SELECT TOP 100 * FROM OPENDATASOURCE ( 'SQLOLEDB' , 'Server=192.0.0.1;uid=TestDB;pwd=123').TestDb.dbo.Dept
  */


--插入,更新,删除 请参考 OPENQUERY方法使用





推荐这篇文章,博主写的很详细!可以深入了解!
SQL不同服务器数据库之间的数据操作整理(完整版)


  


猜你喜欢

转载自blog.csdn.net/cn_mengxin/article/details/80035004