什么是跨服务器操作?

跨服务器操作就是可以在本地连接到远程服务器上的数据库,可以在对方的数据库上进行相关的数据库操作,比如增删改查。

为什么要进行跨服务器操作

随着数据量的增多,业务量的扩张,需要在不同的服务器安装不同的数据库,有时候因为业务需要,将不同的服务器中的数据进行整合,这时候就需要进行跨服务器操作了。

跨服务器操作的工具是什么?

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'; '', 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 = '' -- 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

SQL Server不同服务器不同数据库间的操作的更多相关文章

  1. SQL Server 创建服务器和数据库级别审计

    一.概述 在上一篇文章中已经介绍了审计的概念:本篇文章主要介绍如何创建审计,以及该收集哪些审核规范. 二.常用的审核对象 2.1.服务器审核对象 1.FAILED_LOGIN_GROUP( Audit ...

  2. SQL Server跨服务器的数据库迁移

    1. 使用sql server task中back up 任务,保存为*.bak 文件. 2. 在另一个server中restore database,如果已经存在这个database,会覆盖之前的数 ...

  3. SQL Server 跨服务器 不同数据库之间复制表的数据

    不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库 ...

  4. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

  5. SQL SERVER统计服务器所有的数据库(数据库文件)、表(表行数)、字段(各字段)等详细信息

    原文:SQL SERVER统计服务器所有的数据库(数据库文件).表(表行数).字段(各字段)等详细信息 USE STAT GO SET NOCOUNT ON IF EXISTS(SELECT 1 FR ...

  6. SQL Server 重新初始化系统数据库中的单引号问题

    在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...

  7. sql server 与oracle数据互导的一种思路--sql server链接服务器

    思路:通过在sql server数据库中添加链接服务器,可以远程查询oracle数据库的表环境准备,安装sql server数据库,并安装好oracle驱动,在配置好tnsname文件中配置好orac ...

  8. SQL Server 2008 R2 主从数据库同步

    一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2    DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...

  9. 配置SQL Server 2008服务器

    怎么配置SQL Server 2008服务器_百度经验 http://jingyan.baidu.com/article/9faa7231a922c1473c28cb23.html 1.验证安装是否成 ...

随机推荐

  1. Apache NIFI

    Add a.password file to chrome. Settings -> Advanced -> Security -> Manage Certificates -> ...

  2. 利用Cadence PCB SI分析特性阻抗变化因素

    1.概要 在进行PCB SI的设计时,理解特性阻抗是非常重要的.这次,我们对特性阻抗进行基础说明之外,还说明Allegro的阻抗计算原理以及各参数和阻抗的关系. 2.什么是特性阻抗? 2.1 传送线路 ...

  3. mysql 查询——逻辑查询

    --去重查询 distinct select distinct gander from student; --逻辑查询 and or not --查询18-28之间的数据 select *from s ...

  4. vue里不同数据的循环,其中的数组对象

    用产品的属性数据说明 页面里显示效果为:要把产品的属性显示到页面上,产品属性为后台自主上传产品的属性,产品的属性不同,所以需要把属性和属性值显示到页面上 产品属性数据为: properties: &q ...

  5. STL 萃取(Traits)机制剖析

    模板特化 在将萃取机制之前,先要说明模板特化 当有两个模板类,一个是通用泛型模板,一个是特殊类型模板,如果创建一个特殊类型的对象,会优先调用特殊的类型模板类,例如: template <type ...

  6. [ASP.NET]Web网站与Web应用程序区别

    [ASP.NET]Web网站与Web应用程序区别   本文链接:https://blog.csdn.net/a954553391/article/details/86403521 前言:在项目开发中, ...

  7. 题解【POJ2155】Matrix

    Description Given an \(N \times N\) matrix \(A\), whose elements are either \(0\) or \(1\). \(A[i, j ...

  8. Android开发实战——记账本(4)

    开发日志(4)——MainActivity 在MainActivity中编写了几个方法.首先,点击账本的一条记录可以选择删除他,然后重写了fab,使之在点击他后能够添加记录.还写了删除全部记录的方法. ...

  9. ASCII编码,将英文存储到计算机

    前面我们已经讲到,计算机是以二进制的形式来存储数据的,它只认识 0 和 1 两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符. 可想而 ...

  10. VS2017 + Windows10编译C++ MongoDB驱动

    转载地址:https://blog.csdn.net/sqcfj/article/details/86716831 mongoDB有两个接口库:mongo-c-driver和mongo-cxx-dri ...