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. 参考

T-SQL——关于跨库连接查询的更多相关文章

  1. oracle跨库连接查询

    一.授权(本地客户器端授权当前用户) grant create database link to szfile 第一种连接方法:配置本地数据库服务器的tnsnames.ora文件 SZFILE = ( ...

  2. SQL Server 跨库连接

    -- 开启组件 reconfigure reconfigure -- 关闭组件 reconfigure reconfigure -- 查询远程数据库 SELECT * FROM OPENDATASOU ...

  3. 问题:sqlserver 跨服务器连接;结果:Sql Server 跨服务器连接

    Sql Server 跨服务器连接 用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset ...

  4. SQL Server跨库复制表数据错误的解决办法

    SQL Server跨库复制表数据的解决办法   跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在 Sql Serv ...

  5. SQL2008和SQL2000可以跨服务器连接查询的测试实例

    测试目的: SQL2008 和 SQL2000 是否可以跨服务器连接查询 -- 测试环境: --A 虚拟机 XP ( IP : .0.0.213 )安装 SQL2000 个人版,并安装 SP4 补丁. ...

  6. SQL Server跨库跨服务器访问实现

    我们经常会遇到一个数据库要访问另一个数据库,或者一台服务器要访问另一台服务器里面的数据库. 那么这个如何实现的呢? 相信看完这篇文章你就懂了! 同一台服务器跨库访问实现 1. 首先创建两个数据库Cro ...

  7. SQL的7种连接查询详细实例讲解

    SQL的7种连接查询详细实例讲解 原文链接:https://mp.weixin.qq.com/s/LZ6BoDhorW4cSBhaGy8VUQ 在使用数据库查询语句时,单表的查询有时候不能满足项目的业 ...

  8. c# 实现定义一套中间SQL可以跨库执行的SQL语句

    c# 实现定义一套中间SQL可以跨库执行的SQL语句 目前数据的种类非常多,每种数据都支持sql语句,但是大家发现没有每种数据的SQL都有自己的语法特性,都是SQL语句都没有一个特定的语法标准,导致开 ...

  9. SQL的多表连接查询

    SQL的多表连接查询 多表连接查询具有两种规范,SQL92和SQL99规范. SQL92规范支持下列多表连接查询: (1)等值连接: (2)非等值连接: (3)外连接: (4)广义笛卡尔积: SQL9 ...

随机推荐

  1. 【对线面试官】CountDownLatch和CyclicBarrier的区别

    <对线面试官>系列目前已经连载31篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...

  2. c语言学习篇二【基础语法】

    一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...

  3. python的模拟算法--打印任务

    模拟算法:打印任务 Queue来实现 队列(queue)是一种有次序的数据集合,其特征是新数据项的添加总发生在一端(通常称为"尾rear"端)而现存数据项的移除总发生在另一端(通常 ...

  4. python读取数据写入excel

    '''写入excel文件''' import xlsxwriter # todo 创建excel文件 xl = xlsxwriter.Workbook(r'D:\testfile\test.xlsx' ...

  5. 【Maven实战技巧】「插件使用专题」Maven-Assembly插件实现自定义打包

    前提概要 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  6. 在阿里云上单机部署k8s

    系统:CentOS Linux release 8.1.1911 配置主机名 [root@iZwz9e3t4tj14jzewdtvj8Z ~]# hostnamectl set-hostname la ...

  7. SpringBoot - Bean validation 参数校验

    目录 前言 常见注解 参数校验的应用 依赖 简单的参数校验示例 级联校验 @Validated 与 @Valid 自定义校验注解 前言 后台开发中对参数的校验是不可缺少的一个环节,为了解决如何优雅的对 ...

  8. Apache解析漏洞

    多解析特性 在Apache1.x,2.x中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断.因此对于apache而言,一个test.php.qwea文件依 ...

  9. NTP\rsync+inotify

    NTP网络时间协议 NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC(世界统一时间),再配合各个时区的偏移调整就能实 ...

  10. 又一开源项目爆火于GitHub,Android高级插件化强化实战

    一.插件化起源 插件化技术最初源于免安装运行 Apk的想法,这个免安装的 Apk 就可以理解为插件,而支持插件的 app 我们一般叫 宿主. 想必大家都知道,在 Android 系统中,应用是以 Ap ...