sql - 查询 SQL 服务器组中的单个服务器
问题描述
我有 3 个数据库托管在 3 台不同的服务器上,所有这些服务器都有不同的数据和结构。我需要执行一个查询,该查询将从所有三个表的各个表中提取数据。
我已经将三台服务器注册到一个服务器组中,并且我已经确认所有连接都正常工作。
这是我面临的问题的一个例子。对于此查询的第一部分,我需要从 DB1 中的“应用程序”表中检索记录列表,因此我编写:
SELECT * FROM [DB1].[dbo].[Application]
我知道此查询部分有效,因为它开始从正确的表中返回结果。问题是我没有指定 DB1 所在的服务器,所以一旦查询完成对 DB1.dbo.Application 的查询,它就会在下一个服务器上查找相同的数据库和表。数据库和表在其他服务器上不存在,因此查询失败。
那么如何指定要在其上运行查询的服务器呢?我试过[server_name].[DB1].[dbo].[Application]
了,但它仍然在所有这些上运行查询。
解决方案
服务器组用于维护目的,您需要使用的是链接服务器
例如,在其中一台服务器上SERVER1
,您将需要设置两个链接服务器 - 一个到SERVER2
,一个到SERVER3
然后SERVER1
,您将能够在正常查询窗口中使用四部分名称查询其他服务器:
SELECT * FROM DatabaseName.dbo.Table1;
SELECT * FROM SERVER2.DatabaseName.dbo.Table2;
SELECT * FROM SERVER3.DatabaseName.dbo.Table3;
您还可以在 JOIN 等中使用远程服务器中的表,就好像它们在本地服务器上一样,远程服务器甚至不需要运行 SQL Server——它们可以是 Oracle、MYSQL 等。
但请注意,远程服务器速度很慢,您可能会遇到大型数据集
推荐阅读
- r - R:对目录中的文件名进行循环和操作
- sql - 使用 Legacy SQL 在 Big Query 数据库中的多个表上按日期计算行数
- javascript - Vue-Firebase:如何从同一个应用程序连接到 2 个 Firebase
- machine-learning - 使用 Keras 在深度学习中进行对象标注之前需要哪些预处理步骤?
- akka - Akka:如果不存在则创建actor
- javascript - 反应式表单验证不适用于 IE 11
- python-3.x - 计算列表中重复元素的数量,考虑大于它们的元素
- linux - centOS 7 上的 Docker-CE 无法运行容器
- c# - 如何摆脱 LOH 碎片并优化代码
- javascript - 保存任何网站上可编辑的内容所做的更改