SQL Server 跨库/服务器查询
这里写目录标题
- 1 SQL Server 跨库/服务器查询
- 1.1 跨库查询
- 1.2 跨服务器查询
- 1.2.1 创建链接服务器
- 1.2.2 跨库查询
- 1.3 拓展:SQL Server 中所有权和用户与架构的分离
1 SQL Server 跨库/服务器查询
1.1 跨库查询
在同一服务器下的跨库查询较为简单,示例
Database.DatabaseSchema.DatabaseObject
# 示例 [SqlMatc] 数据库中,查询数据库[SQLATM]里的 DeptSales_copy 表里的所有数据
select * from [SQLATM].[dbo].[DeptSales_copy]
1.2 跨服务器查询
进行跨服务器查询前提是在本地服务器上创建链接服务器。
1.2.1 创建链接服务器
方法一:利用系统存储过程 sp_addlinkedserver
sp_addlinkedserver
创建链接服务器。 链接服务器提供对 OLE DB 数据源的分布式异类查询的访问权限。 使用 sp_addlinkedserver创建链接服务器后,可对此服务器运行分布式查询。 如果将链接服务器定义为 SQL Server 实例,则可以执行远程存储过程。
权限
语句 sp_addlinkedserver 需要 ALTER ANY LINKED SERVER 权限。 (“SQL Server Management Studio新建链接服务器”对话框的实现方式需要固定服务器角色的成员sysadmin身份。)
参数解读
sp_addlinkedserver [ @server = ] 'server' -- 链接服务器的名称[ , [ @srvproduct = ] 'product_name' ] -- 链接服务器的 OLE DB 数据源的产品名-- product_name值为 nvarchar (128) ,-- 默认值为 NULL。 -- 如果值为SQL Server,则无需指provider_name、-- data_source、位置、provider_string和目录。[ , [ @provider = ] 'provider_name' ] -- 唯一编程标识符。建议使用 MSOLEDBSQL 而不是 SQLNCLI。[ , [ @datasrc = ] 'data_source' ] -- 目的服务器地址[ , [ @location = ] 'location' ] -- 本地登录[ , [ @provstr = ] 'provider_string' ] -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串。[ , [ @catalog = ] 'catalog' ] -- 与 OLE DB 提供程序建立连接时要使用的目录。
链接示例:
if exists(select * from sys.servers where name='LinkedServerName')
begin--删除运行本地与远程之间的用户映射execute sys.sp_droplinkedsrvlogin @rmtsrvname='LinkedServerName', @locallogin=null--删除链接服务器execute sys.sp_dropserver @server='LinkedServerName', @droplogins='droplogins'
end
goEXEC sp_addlinkedserver@server = 'LinkedServerName' -- 目的服务器别名,@srvproduct = '',@provider = 'MSOLEDBSQL' ,@datasrc = '192.168.3.21' -- 目的服务器IP地址,@location = '' -- 本地登录,@provstr = '' -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串。--@catalog = ''; -- 指定目录 默认值为 NULL-- 将凭据和选项添加到此链接服务器。
EXEC sp_addlinkedsrvlogin@rmtsrvname = 'LinkedServerName',@useself = 'false' -- 是否通过模拟登录 or 显示的提交登录名和密码链接到远程服务器,@rmtuser = 'sa' -- 登录名,@rmtpassword = 'root'; -- 密码EXEC sp_serveroption 'LinkedServerName', 'rpc', true; -- 从指定的服务器启用远程过程调用 (RPC)
EXEC sp_serveroption 'LinkedServerName', 'rpc out', true; -- 对指定的服务器启用 RPC。-- 查询示例 select * from Server.Database.DatabaseSchema.DatabaseObject
SELECT name FROM [LinkedServerName].master.sys.databases;
此处将链接SQL Server服务器封装成了名为RemoteConnectionServer的存储过程方便使用
在此存储过程中需要提供四个参数,目的服务器别名(见名知义)、目的服务器IP、目的服务器登录名以及密码。即可创建一个服务器链接。(注意此存储过程只创建了一个简单的链接服务器,设置了必要的链接参数,使用时请确保参数够用。)
create proc RemoteConnectionServer@LinkedServerName nvarchar(255) -- 目的服务器别名,@LinkedServerIP nvarchar(255) -- 目的服务器IP地址,@userName nvarchar(255) -- 登录名,@password nvarchar(255) -- 密码
as-- 查找链接服务器是否已创建,若创建则删除if exists(select * from sys.servers where name= @LinkedServerName)begin-- 删除运行本地与远程之间的用户映射execute sys.sp_droplinkedsrvlogin @rmtsrvname= @LinkedServerName, @locallogin=null--删除链接服务器execute sys.sp_dropserver @server=@LinkedServerName, @droplogins='droplogins'end-- 创建链接服务器 exec sp_addlinkedserver@server = @LinkedServerName -- 目的服务器别名,@srvproduct = '',@provider = 'MSOLEDBSQL' ,@datasrc = @LinkedServerIP -- 目的服务器IP地址,@location = '' -- 本地登录,@provstr = '' -- 标识唯一数据源的特定于 OLE DB 提供程序的连接字符串。--@catalog = ''; -- 指定目录 默认值为 NULL-- 将凭据和选项添加到此链接服务器。exec sp_addlinkedsrvlogin@rmtsrvname = @LinkedServerName,@useself = 'false' -- 是否通过模拟登录 or 显示的提交登录名和密码链接到远程服务器,@rmtuser = @userName -- 登录名,@rmtpassword = @password; -- 密码-- 设置服务器选项exec sp_serveroption @LinkedServerName, 'rpc', true; -- 从指定的服务器启用远程过程调用 (RPC)exec sp_serveroption @LinkedServerName, 'rpc out', true; -- 对指定的服务器启用 RPC。go
执行存储过程
declare @LinkedServerName nvarchar(255) = 'linkName'
declare @LinkedServerIP nvarchar(255) = '192.168.3.21'
declare @userName nvarchar(255) = 'sa'
declare @password nvarchar(255) = '****'
-- 执行
exec RemoteConnectionServer @LinkedServerName, @LinkedServerIP, @userName, @password-- 测试
SELECT name FROM linkName.master.sys.databases;
方法二:利用SSMS创建链接服务器
下面以链接192.168.2.21 SQL Server 服务器为例:
1 打开SSMS链接到本地服务器
2 选择服务器对象–>链接服务器

3 链接服务器 右键 新建链接服务器 常规页
PS:如果勾选服务器类型为"SQL Server",则此处’‘链接服务器’'名必须为IP 地址。若选择"其他数据源",此处的链接服务器名作为映射存在(别名), 在数据源处填写IP地址。
当然你也可以选择其他数据源去链接 SQL Server 服务器。

4 选择“安全性”页

5 选择 “服务器选项” 将 RPC 与 RPC Out 设置为True,默认为False。
- RPC
从指定的服务器启用远程过程调用 (RPC)。 - RPC Out
对指定的服务器启用 RPC。

6 点击 “确定”,此时链接服务器目录下会出现你创建的连接服务器。
7 右键 测试链接

successs!

参考链接01:sp_addlinkedserver (Transact-SQL) - SQL Server | Microsoft Learn
参考链接02:创建链接服务器 - SQL Server | Microsoft Learn
1.2.2 跨库查询
-- 查询示例 select * from Server.Database.DatabaseSchema.DatabaseObject
SELECT * FROM [192.168.3.21].[GZ].[dbo].[Dept]
1.3 拓展:SQL Server 中所有权和用户与架构的分离
SQL Server 安全性的核心概念是对象的所有者具有管理这些对象的不可撤消的权限。 你不能删除对象所有者的特权,并且如果用户在数据库中拥有对象,你也不能将用户从此数据库中删除。
用户架构分离
通过用户架构分离,可实现管理数据库对象权限的更大灵活性。 架构是一个适用于数据库对象的命名容器,它使你能够将对象分组到单独的命名空间中。
用于引用对象的由四部分组成的命名语法指定架构名称。
Server.Database.DatabaseSchema.DatabaseObject
架构所有者和权限
任何数据库主体都可以拥有架构,并且一个主体可拥有多个架构。 您可以对架构应用安全规则,安全规则将由架构中的所有对象继承。 如果设置了对架构的访问权限,则当新对象添加到架构时,新对象会自动应用这些权限。 可以为用户分配一个默认的架构,且多个数据库用户可以共享同一架构。
默认情况下,当开发人员在架构中创建对象时,该对象由拥有架构的安全主体而不是开发人员拥有。 可以使用 ALTER AUTHORIZATION Transact-SQL 语句转移对象所有权。 尽管架构还可以包含由不同用户拥有的对象并且这些对象具有比分配给架构的权限更加细化的权限,但因为架构会增大管理权限的复杂度,因此不建议使用。 对象可以在架构之间移动,架构所有权也可以在主体之间转移。 可以在不影响架构的情况下删除数据库用户。
实现后向兼容性的内置架构
SQL Server 随附 9 个预定义架构,这些架构的名称与内置数据库用户和角色的名称相同:db_accessadmin、db_backupoperator、db_datareader、db_datawriter、db_ddladmin、db_denydatareader、db_denydatawriter、db_owner 和 db_securityadmin。 这些架构用于实现后向兼容性。 建议不要将它们用于用户对象。 可以删除与固定数据库角色同名的架构 - 除非它们已被使用,在这种情况下,drop-command 仅返回错误并阻止删除已使用的架构。 例如:
IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_accessadmin')
DROP SCHEMA [db_accessadmin]
GOIF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_backupoperator')
DROP SCHEMA [db_backupoperator]
如果从模型数据库中删除这些架构,它们将不会显示在新数据库中。 不能删除包含对象的架构。
无法删除以下架构:
dboguestsysINFORMATION_SCHEMA
sys 和 INFORMATION_SCHEMA 架构是为系统对象而保留的。 您不能在这些架构中创建对象,而且不能删除它们。
dbo 架构
dbo 架构是每个数据库的默认架构。 默认情况下,使用 CREATE USER Transact-SQL 命令创建的用户的默认架构为 dbo。 dbo 架构由 dbo 用户帐户拥有。
默认架构被分配为 dbo 的用户不会继承 dbo 用户帐户的权限。 用户不从架构继承权限;架构权限由架构中包含的数据库对象继承。 用户的默认架构仅用于对象引用,以防用户在查询对象时省略架构。
当使用部分名称来引用数据库对象时,SQL Server 首先在用户的默认架构中查找。 如果在此处未找到该对象,则 SQL Server 其次将在 dbo 架构中查找。 如果对象不在 dbo 架构中,则会返回一个错误。
参考链接:SQL Server 中所有权和用户与架构的分离 - SQL Server | Microsoft Learn
相关文章:
SQL Server 跨库/服务器查询
这里写目录标题 1 SQL Server 跨库/服务器查询1.1 跨库查询1.2 跨服务器查询1.2.1 创建链接服务器1.2.2 跨库查询 1.3 拓展:SQL Server 中所有权和用户与架构的分离 1 SQL Server 跨库/服务器查询 1.1 跨库查询 在同一服务器下的跨库查询较为简单,示例…...
word转PDF文件变小,图片模糊
word论文29M,文件——另存为——只有1.5M左右,图片压缩严重,图片看不清。 word中很多大图,5M一张的图,所以word很大。 找了很多方法,转换后都在2M左右,勉强可以。 直到找到了这个,…...
被删除并且被回收站清空的文件如何找回
文件的意外删除和回收站清空是许多用户面临的普遍问题。这种情况下,很多人会感到无助和焦虑,担心自己的重要文件永远丢失。然而,幸运的是,依然存在一些有效的方法能够帮助我们找回被删除并且被回收站清空的文件。 ▌被删除文件在…...
每日两题 131分割回文串 784字母大小写全排列(子集模版)
131 131 题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s “aab” 输出:[[“a”,“a”,“b”]…...
Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap
前言 除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap 是 Java 集合框架中的一部分,用于存储键值对(key-value pairs)。HashMap 允许我们通过键来快速查找和检索值&…...
ES6 特性
一、ES6 1.1 ES6 概念 1.1.1 什么是 ES ES 全称 EcmaScript 是脚本语言的规范JavaScript 是 EcmaScript 的一种实现ES 新特性就是指 JavaScript 的新特性 1.1.2 为什么要使用 ES 语法简单,功能丰富框架开发应用前端开发职位要求 1.1.3 为什么要学习 ES6 ES6 …...
重拾html5
新增的position: sticky; 基于用户的滚动位置来定位,粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。ie15以上的低版本不支持,Safari 需要使用 -webkit- prefix; vertical-align: midd…...
递归学习——记忆化搜索
目录 编辑 一,概念和效果 二,题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…...
ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊
9月13日,Today消息,一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病,每天需要服用Motrin(美林)才能止痛。3年的时间,看了17名医生无法确诊病因。(新闻地址:https://www.today.com/heal…...
Laf 云开发平台及其实现原理
Laf 产品介绍 自我介绍 大家好,我是来自 Laf 团队的王子俊,很高兴今天能在这里给大家分享我们 Laf 云开发平台及其实现原理。本来想说一点什么天气之类的话作为开头,但主持人都说完啦,我就不多说了,还是直接开始今天…...
浅谈STL|STL函数对象篇
一.函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 特点 函数对象在使用时,可以像普通函数那…...
自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储
文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语…...
从零基础到精通Flutter开发:一步步打造跨平台应用
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 导言 Flutter是一种流行…...
SpringBoot整合WebSocket【代码】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖…...
微服务 第一章 Java线程池技术应用
系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻,每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识:Java内部类1.1.4…...
行业追踪,2023-09-14
自动复盘 2023-09-14 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
传输层协议--UDP
引入 传输层负责数据能够从发送端传输到接收端。 端口号(Port) 端口号标识了一个主机上进行通信的一个进程。 两个问题: 1. 一个进程可以绑定多个端口号吗?--可以 2.一个端口号可以绑定多个进程吗?--不可以 我们…...
微信会员卡开发流程
功能需求: 通过微信第三方平台创建的模板小程序,想要实现用户在小程序支付一定金额后领取会员卡,领取会员卡后可给用户下发一定数量的优惠券,并且实现用户在小程序消费享受商品折扣。 开发流程: 一、了解微信的3个平…...
《算法竞赛·快冲300题》每日一题:“点灯游戏”
《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…...
常见高级语言的输入与输出训练(一)
文章目录 题目概述1 输入描述: 输出描述: 输入 输出 示例C语言代码 题目概述2 题目描述 输入描述: 输出描述: 输入 输出 示例Java代码 前言 本文主要讲解两个算法题的代码实现 题目概述1 计算ab 打开以下链接可以查看正确的代码 数据范围:数据组数满…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
