zoukankan      html  css  js  c++  java
  • T-SQL——关于跨库连接查询

    shanzm-2021年8月28日 16:56:34

    0. 同一台服务器不同数据库

    同一个服务器中在一个连接查询不同的数据库中的表,可以在表名前加上数据库的名为前缀

    【示例】

    select * from 数据库.dbo.表
    


    1. 使用跨库查询函数——OpenDataSource()

    在不同服务器中,一个服务器的连接中查询另外一个服务器中的数据库,可以在sql语句中使用OpenDataSource('sqloledb','server=服务器IP地址;uid=数据库登陆用户;pwd=密码').数据库名.dbo.表名

    【示例】

    select * from OpenDataSource('sqloledb','server=xxx.xxx.xxx.xxx;uid=sa;pwd=*****').database_name.dbo.table_name
    

    【说明】

    • OpenDataSource()函数不接受参数变量。只能是写死指定的连接字符串,不能使用变量,所以在存储过程中不能动态的设置OpenDataSource()参数,这一点及其的不安全&不方便

    • 使用OpenDataSource()函数需要启用一些高级配置选项:

      • 第一次使用的时候,可能会提示:
      消息 15281,级别 16,状态 1,第 1 行
      SQL Server 阻止了对组件“Ad Hoc Distributed Queries”的 STATEMENT“OpenRowset/OpenDatasource”的访问,因为此组件已作为此服务器安全配置的一部分而被      关闭。系统管理员可以通过使用 sp_configure 启用“Ad Hoc Distributed Queries”。有关启用“Ad Hoc Distributed Queries”的详细信息,请搜索 SQL Server       联机丛书中的“Ad Hoc Distributed Queries”。
      

      可以在当前连接的数据库中,通过以下语句开启该组件

      exec sp_configure 'show advanced options',1
      reconfigure
      exec sp_configure 'Ad Hoc Distributed Queries',1
      reconfigure
      

      关闭上述组件可以执行一下语句:

      exec sp_configure 'Ad Hoc Distributed Queries',0
      reconfigure
      exec sp_configure 'show advanced options',0
      reconfigure
      


    2. 使用链接服务器(Linking Server)

    1. 使用图形界面创建链接服务器:

      创建链接服务器,可以使用MSSMS-->服务器对象-->链接服务器-->右键:新建链接服务器

      常规:

      • 链接服务器:服务器IP地址
      • 服务器类型:选择SQL Server

      安全性:

      • 选中使用此安全上下文建立连接
      • 输入用户名和密码
    2. 使用存储过程创建链接服务器

    当前服务器的连接中,同时执行以下存储过程,创建其他服务器(即目标服务器)为链接服务器

    exec sp_addlinkedserver--创建链接服务器
    @server='链接名称',--要访问的服务器别名(一般就是直接使用服务器地址)
    @srvproduct='',
    @provider='SQLOLEDB',
    @datasrc='目标服务器地址'--要访问的服务器地址
    go
    exec sp_addlinkedsrvlogin--添加链接服务器的登陆用户
    '链接名称',--被访问的服务器别名
    'false',
     null,
    '用户名',--目标服务器账号
    '密码'--目标服务器密码
    

    示例:从链接服务器中查询

    select * from 链接服务器别名.database_name.dbo.table_name
    


    3. 使用OpenDataSource()函数和链接服务器的使用区别

    • OpenDataSource()功能相对链接服务器少一些
    • 对于需要频繁访问的数据源,要将其设置为链接服务器,而不是使用OpenDataSource
    • OpenDataSoucre()每次调用都明文提供连接字符串,包含密码,相对不安全


    4. 参考

    作者:shanzm
    欢迎交流,欢迎指教!
  • 相关阅读:
    Java-LockSupport
    Kafka Eagle 安装
    Kafka shell
    python pip 使用
    Kafka 集群部署
    Kafka 概述
    DockerFile 简单使用
    《深入理解Java虚拟机》读书笔记
    linux安装redis
    Java多线程基础知识例子
  • 原文地址:https://www.cnblogs.com/shanzhiming/p/15200513.html
Copyright © 2011-2022 走看看