SQL Server不同服务器不同数据库间的操作
时间:2019-09-16
本文章向大家介绍SQL Server不同服务器不同数据库间的操作,主要包括SQL Server不同服务器不同数据库间的操作使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是跨服务器操作?
跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库上进行相关的数据库操作,比如增删改查。
为什么要进行跨服务器操作
随着数据量的增多,业务量的扩张,需要在不同的服务器安装不同的数据库,有时候因为业务需要,将不同的服务器中的数据进行整合,这时候就需要进行跨服务器操作了。
跨服务器操作的工具是什么?
DBLINK(数据库链接),顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
方式一:
创建SQL Server远程链接:
1. 登录到本地数据库-->服务器对象-->链接服务器(右键)-->新建链接服务器
2. 在弹出的对话框中输入相关信息
3. 点击左侧“安全性”,出现以下页面,输入对方数据库的账号密码即可
4. 点击“确定”后即创建成功,如下图可以看到创建好的链接服务器
5. 下面使用创建好的链接试着查询对方服务器的表来验证一下
原文地址:http://baijiahao.baidu.com/s?id=1601340639397887562&wfr=spider&for=pc
方式二:
同一台服务器不同数据库
select * from 数据库名..表名 或 select * from 数据库名.dbo.表名
1. 创建链接服务器
1.1 创建一个链接名
exec sp_addlinkedserver 'LinkName', '', 'SQLOLEDB', '远程服务器名或ip地址' --有自定义实例名还要加上"/实例名"
/*例如:exec sp_addlinkedserver 'TonyLink', '', 'SQLOLEDB', '192.168.2.110' */
1.2 创建登录信息(或叫创建链接服务器登录名映射)(只需选择一种方式)
1.2.1 以windows认证的方式登录
exec sp_addlinkedsrvlogin 'LinkName' --或exec sp_addlinkedsrvlogin 'LinkName', 'true'
/*例如:exec sp_addlinkedsrvlogin 'TonyLink' */
1.2.2 以SQL认证的方式登录
exec sp_addlinkedsrvlogin 'LinkName', 'false', NULL, '用户名', '密码'
/*例如:exec sp_addlinkedsrvlogin 'TonyLink', 'false', null, 'sa', '123456' */
2. 链接服务器相关数据操作
2.1 查询
select * from LinkName.数据库名.架构名.表名
/*例如:select * from TonyLink.LoadData.dbo.XimaArea */
2.2 把远程数据库查询的数据新增导入到本地表(本地表不需要提前存在,会自动创建)
select * into 表名 from LinkName.数据库名.架构名.表名
/*例如:select * into Newtb fromTonyLink.LoadData.dbo.XimaArea */
2.3 更新
update LinkName.数据库名.架构名.表名 set 字段='值' where 字段='条件'
/*例如:update TonyLink.LoadData.dbo.XimaArea set area='中华区' where areaid=8 */
2.4 删除
delete LinkName.数据库名.架构名.表名 where 字段名='条件'
/*例如:delete TonyLink.LoadData.dbo.XimaArea where areaid=1 */
不再使用时删除链接服务器
exec sp_dropserver 'LinkName', 'droplogins'
3. 通过行集函数(openquery/openrowset/opendatasource)操作方法
3.1 openquery 方法(需要借助刚创建的链接服务器):
3.1.1 查询
select * from openquery(linkname, 'select * from 数据库名.架构名.表名')
/* 例如:select * from openquery(TonyLink, 'select * from LoadData.dbo.XimaArea') */
3.1.2 导入
3.1.2.1 把本地表(本地表需要提前存在)导入到远程表(两表之间列要对应)
insert openquery(linkname, 'select * from 数据库名.架构名.表名') select * from 本地表
/* 例如:insert openquery(TonyLink, 'select area from LoadData.dbo.XimaArea') select area from ttt */
3.1.2.2 把本地表(本地表需要提前存在)指定列导入远程表(两表之间列要对应)
insert openquery(linkname, 'select * from 数据库名.架构名.表名') (列, 列...) select 列, 列... from 本地表 /* 例如:insert openquery(TonyLink,'select * from LoadData.dbo.ximajxs')(jxsName, consignee, address) select jxsName, consignee, address from ttt */
3.1.3 更新
update openquery(linkname, 'select * from 数据库名.架构名.表名') set 字段='值' where 字段='条件'
/*例如:update openquery(TonyLink, 'select * from LoadData.dbo.ximajxs') set JxsName='北京有限公司' where jxsId=10 */
3.1.4 删除
delete openquery(linkname, 'select * from 数据库名.架构名.表名') where 字段名='条件'
/*例如:delete openquery(TonyLink, 'select * from LoadData.dbo.ximajxs') where jxsId=10 */
3.2 openrowset:
3.2.1 查询
select * from openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
报错问题:
解决方法:
在数据库服务实例名(如图1-3,GP-PC\sql2008位置)点击鼠标右键【方面】,在窗口【查看方面】— 点击【常规】— 【方面】— 选择【外围应用配置器】,找到【AdHocRemoteQueriesEnabled】— 选择【True】— 点击【确定】
3.2.2 生成本地表
select * into 表名 from openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
3.2.3 把本地表导入到远程表
insert openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
select * from 本地表
3.2.4 更新本地表
update b
set b.address = a.area
from openrowset('SQLOLEDB', '192.168.2.110'; 'sa'; '123456', LoadData.dbo.XimaArea) as a
inner join ttt b
on a.areaid=b.areaid
3.3 opendatasource
3.3.1 查询
select * from opendatasource('SQLOLEDB', 'Data Source=192.168.2.110; uid=sa; pwd=123456').LoadData.dbo.XimaArea
4. 具体例子
if exists(select 1 from master.dbo.sysservers where srvname='linktest')
begin
exec sys.sp_droplinkedsrvlogin 'linktest', 'sa'
exec sys.sp_dropserver 'linktest'
end
exec sys.sp_addlinkedserver
@server = 'linktest', -- sysname
@srvproduct = N'', -- nvarchar(128)
@provider = N'SQLOLEDB', -- nvarchar(128)
@datasrc = N'192.168.2.110' -- nvarchar(4000)
exec sys.sp_addlinkedsrvlogin
@rmtsrvname = 'linktest', -- sysname
@useself = 'false', -- varchar(8)
@locallogin = null, -- sysname
@rmtuser = 'sa', -- sysname
@rmtpassword = '123456' -- sysname
select * from linktest.LoadData.dbo.ximalss
if exists(select 1 from master.dbo.sysservers where srvname='linktest')
begin
exec sys.sp_droplinkedsrvlogin 'linktest', 'sa'
exec sys.sp_dropserver 'linktest'
end
go
参考链接:https://www.cnblogs.com/w-y-f/archive/2012/05/07/2488474.html
原文地址:https://www.cnblogs.com/zhaoyl9/p/11527090.html
- mybatis 使用tips - 使用多个参数
- 从高的角度看自动化测试
- Django中请求的生命周期
- 程序猿python学习AIphaZero,TensorFlow强化学习AI游戏,100行代码运行看看!
- awk中NF的使用
- tar.gz 解压
- Python&机器学习之项目实践
- JAVA CDI 学习(5) - 如何向RESTFul Service中注入EJB实例
- mysql5.7 column cannot be null
- 区块链大热 价值近20万的Matrix.io被启用
- 比特币科普之什么是区块高度?
- 如何正确并快速理解MapReduce
- mysqldump的简单使用
- mac:在当前文件夹打开terminal终端
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信小程序转发朋友圈详解
- Error: Protocol error, got "H" as reply type byte
- 树莓派基础实验33:TCRT5000红外循迹传感器实验
- 10W个Java对象有多大
- 一次线程池引发的线上故障分析
- dubbo 启动Failed to save registry store file报错
- 大数据的列式存储格式:Parquet
- springBoot 入门(六)—— 整合Spring框架开启自带的任务调度器执行任务(注解方式)
- java字节流入门(缓冲输出流)
- EsotericSoftware Kryo —— 官方(1)
- Java的I/O类库的基本架构一句话介绍
- 树莓派综合项目1:智能温度测量系统实验
- 一句话ListenableFuture简介
- Google Guava Cache 使用
- Linux下安装maven3.6.2遇到的问题