由于业务的拆分,数据库拆分为两种作用:

  1. 汇总数据库(Master,头节点数据库),
  2. 子节点数据库(Compute Node,计算子节点数据库)

这样,就设计到子节点访问头节点数据库中的某张汇总表,这种表的记录一般在几,到几十万行左右,目前适合做跨库查询。

跨库查询目前分为两种:

  1. 通过sp_addlinkedserver建立链接服务器
  2. 没有链接服务器时,可以使用openrowset或者opendatasource函数
    1. 在部署时,需要在SQLSERVER外围应用配置器中启用OpenRowSet和OpenDataSource支持
    2. 较第一种(通过sp_addlinkedserver建立链接服务器)简单,适合简单的sql语句中,如果是复杂的逻辑,需要有语句块、函数或者存储过程才能完成时,建议使用第一种(即时创建、销毁连接服务器)
  • 通过sp_addlinkedserver建立链接服务器

    • 使用步骤

      • 通过Sp_AddLinkedServer创建链接服务器

        • 示例: Exec Sp_AddLinkedServer 'RemoteLinkMasterDB','','SqlOleDB','172.21.1.1\MyDBInstace'
      • 通过Sp_AddLinkedSrvLogin 创建链接服务器使用账户、密码

        • 示例: Exec Sp_AddLinkedSrvLogin 'RemoteLinkMasterDB','false',null,'MyMasterDataBaseUser','MyMasterDBBaseUserPassword'
      • 验证连接服务器是否存在
        • 代码示例:if exists(select 1 from master..sysservers where srvname='RemoteLinkMasterDB'
      • 通过Sp_ServerOption 设置 RPC、RPC Out为True(如果不需要执行跨域存储过程则不需要设置此项)
        • Exec Sp_ServerOption 'RemoteLinkMasterDB','RPC','true';
        • Exec sp_ServerOption 'RemoteLinkMasterDB','RPC Out','true';
      • 使用之后,通过Sp_DropServer删除链接服务器、删除链接登陆
        • Exec Sp_DropServer 'RemoteLinkMasterDB','DropLogins';
      • SQL中使用示例:
        • 查询:Select * From RemoteLinkMasterDB.数据库名称(Database Name).Scheme(数据库架构).表/视图名;
        • 执行跨域存储过程:Exec RemoteLinkMasterDB.数据库名称(Database Name).Scheme(数据库架构).存储过程名(参数相关);
        • 还可以使用openquery函数:Select * From OpenQuery(RemoteLinkMasterDB,'Select * From 数据库名称.架构名.表名');
  • 没有链接服务器时,可以使用openrowset或者opendatasource函数
    • OpenRowSet用法示例:

      • Select * From OpenRowSet('SqlOleDB','172.21.1.1\MyDBInstace','MyMasterDataBaseUser','MyMasterDBBaseUserPassword','Select GetDate()');
      • Select * From OpenRowSet('SqlOleDB','Source=172.21.1.1\MyDBInstace;UID=MyMasterDataBaseUser;PWD=MyMasterDBBaseUserPassword','Select GetDate()');
    • OpenDataSource用法示例:
      • Select * From OpenDataSource('SqlOleDB','Data Source=172.21.1.1\MyDBInstace;User ID=MyMasterDataBaseUser;Password=MyMasterDBBaseUserPassword').数据库名.架构名.表名
    • 这两种方式必须开通 Ad Hoc Distributed Queries。
启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',
reconfigure 关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',
reconfigure
exec sp_configure 'show advanced options',
reconfigure

参考:http://www.2cto.com/database/201206/136383.html

SqlServer跨库查询的更多相关文章

  1. SQLServer跨库查询--分布式查询

    出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...

  2. SQLServer跨库查询--分布式查询(转载)

    --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...

  3. SQLServer 跨库查询实现方法

    不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分 本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限SQL Serve ...

  4. sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器) 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instanc ...

  5. 跨库查询(OpenDataSource)与链接服务器(Linking Server)

    一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you on ...

  6. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  7. ACCESS-如何多数据库查询(跨库查询)

    测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...

  8. Access数据库跨库查询及记录集区分

    医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...

  9. EF 跨库查询

    原因:最近公司项目,遇到一个ef跨库查询的问题.(只是跨库,并不是跨服务器哈) 主要我们的一些数据,譬如地址,城市需要查询公共资料库. 但是本身我的程序设计采用的是ef框架的.因此为这事花费了1天时间 ...

随机推荐

  1. QQ音乐的各种相关API

    QQ音乐的各种相关API 分类: oc2014-01-29 15:34 2676人阅读 评论(2) 收藏 举报 基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证 ...

  2. 制作支持UEFI PC的Server2008 R2系统安装U盘

    下载R2系统 ISO ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x6 ...

  3. jdk1.7

    http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-windows-i586.exe?AuthParam=1450748157_ ...

  4. js 和 jquery 获取页面和滚动条的高度 视口高度文档高度

    js 和 jquery 获取页面和滚动条的高度 //页面位置及窗口大小 function GetPageSize() { var scrW, scrH; if(window.innerHeight & ...

  5. APP 上架苹果应用商城

    http://www.360doc.com/content/15/0203/15/19663521_445974056.shtml http://jingyan.baidu.com/article/4 ...

  6. qt cef嵌入web

    原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium Embedded Fra ...

  7. net use

    net use * \\ipaddr\share "password" /user:"username" /persistent:yes 在运行中输入“\\”+ ...

  8. strcpy之代码的健壮性与可维护性

    strcpy   函数的原型是: char * strcpy(char * strDest,const char * strSrc);    功能:把从strSrc地址开始且含有NULL结束符的字符串 ...

  9. [LeetCode]题解(python):030-Substring with Concatenation of All Words

    题目来源 https://leetcode.com/problems/substring-with-concatenation-of-all-words/ You are given a string ...

  10. detailsview 样式小问题

    detailsview不显示表头,设置HeaderText=""就可以,不知道为什么,如果有值,其他方式都没有调好! 内网格显示为0,Gridlines="None&qu ...