You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在MS SQL Server中连接不同服务器上的两张表?

在MS SQL Server中跨服务器连接表的实现方法及替代方案

MS SQL Server支持跨服务器表连接

完全可以实现,主要有两种常用方法:

方法1:创建链接服务器(Linked Server)

适合需要频繁跨服务器查询的场景,创建一次后可重复使用:

  • 图形界面操作(SSMS):
    展开「服务器对象」→「链接服务器」→右键「新建链接服务器」,填写远程服务器的IP/实例名、身份验证方式(可设置登录映射,关联本地账号与远程服务器的账号密码)。
  • T-SQL命令创建:
-- 创建链接服务器
EXEC sp_addlinkedserver
    @server = N'RemoteSQLServer', -- 自定义链接服务器名称
    @srvproduct = N'',
    @provider = N'SQLNCLI', -- SQL Server Native Client
    @datasrc = N'192.168.1.100\MSSQLSERVER'; -- 远程服务器IP+实例名

-- 设置登录映射(关联本地登录与远程服务器账号)
EXEC sp_addlinkedsrvlogin
    @rmtsrvname = N'RemoteSQLServer',
    @useself = N'False',
    @locallogin = NULL,
    @rmtuser = N'remote_user',
    @rmtpassword = N'remote_pwd';
  • 跨服务器查询示例:
SELECT local_tb.id, local_tb.name, remote_tb.order_no
FROM LocalDB.dbo.LocalTable local_tb
JOIN RemoteSQLServer.RemoteDB.dbo.RemoteTable remote_tb
ON local_tb.id = remote_tb.local_id;

方法2:使用OPENROWSET函数

适合临时跨服务器查询,无需创建永久链接:
先开启Ad Hoc Distributed Queries配置:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

然后执行跨服务器连接查询:

SELECT local_tb.*, remote_tb.*
FROM LocalDB.dbo.LocalTable local_tb
JOIN OPENROWSET(
    'SQLNCLI',
    'Server=192.168.1.100\MSSQLSERVER;Uid=remote_user;Pwd=remote_pwd;',
    'SELECT * FROM RemoteDB.dbo.RemoteTable'
) remote_tb
ON local_tb.id = remote_tb.local_id;

其他支持跨服务器连接的RDBMS

大部分主流关系型数据库都支持该功能,举例:

  • MySQL:可使用FEDERATED存储引擎创建指向远程表的本地映射表,或通过SELECT ... FROM [mysql://user:pass@remote_host/db/table]语法(需启用相应插件)。
  • PostgreSQL:借助dblink扩展实现,先创建扩展CREATE EXTENSION dblink;,再执行跨库连接查询:
SELECT local_tb.id, remote_tb.value
FROM local_table local_tb
JOIN dblink('host=192.168.1.101 port=5432 dbname=remote_db user=postgres password=123456', 'SELECT id, value FROM remote_table')
AS remote_tb(id INT, value VARCHAR)
ON local_tb.id = remote_tb.id;
  • Oracle:创建数据库链接(Database Link),CREATE DATABASE LINK remote_link CONNECT TO remote_user IDENTIFIED BY remote_pwd USING 'ORCL_REMOTE';,之后通过SELECT * FROM local_table a JOIN remote_table@remote_link b ON a.id = b.id;查询。

内容的提问来源于stack exchange,提问作者Lucas Correa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:12:42