本指南详细介绍了使用 SQL Server 连接另一台服务器的多种方法,内容涵盖了利用 T-SQL 语句(如OPENDATASOURCE、OPENQUERY和LINKED SERVERS)进行跨服务器查询,以及如何配置网络、防火墙和身份验证(如 Windows 和 SQL 身份验证),文章还讲解了如何执行分布式事务及处理连接错误,帮助用户掌握跨数据库操作的核心技巧与注意事项。
在现代企业级应用开发中,数据库往往分布在不同的服务器上,为了进行数据汇总、报表生成或数据迁移,我们经常需要在一个 SQL Server 实例中访问另一个实例的数据,实现这一功能的核心技术通常被称为“跨服务器查询”或“链接服务器”。
本文将详细介绍如何配置环境,使用 SQL Server 连接另一台服务器,并提供两种主要的方法:图形化界面配置和 T-SQL 脚本配置。
前置条件检查
在尝试 SQL Server 连接另一台服务器 之前,请确保满足以下网络和配置要求,否则连接将会失败:

- 网络连通性:确保两台服务器之间的网络是互通的,可以通过 Ping 命令测试。
- 端口开放:SQL Server 默认使用 1433 端口,请检查防火墙是否允许该端口的入站和出站流量。
- 服务配置:在目标服务器上,确保 SQL Server 服务已启动,并且配置管理器中启用了 TCP/IP 协议。
- 身份验证模式:目标服务器必须设置为“混合模式”,否则无法使用 SQL 身份验证进行连接。
方法一:使用 SSMS 图形化界面配置
对于初学者或不常编写脚本的 DBA 使用 SQL Server Management Studio (SSMS) 是最直观的方式。
- 在源服务器上,打开 SSMS 并连接到当前实例。
- 在“对象资源管理器”中,右键点击“服务器对象”,选择“链接服务器”。
- 在弹出的对话框中,点击“新建链接服务器”。
- 常规 页面:
- 链接服务器:输入目标服务器的名称或 IP 地址。
- 服务器类型:选择“SQL Server”。
- 安全性:选择“使用此安全上下文”,然后输入具有访问权限的目标服务器账号和密码。
- 点击确定,配置即完成,之后你就可以在查询窗口中直接使用
SELECT * FROM [目标服务器名].[数据库名].[架构].[表名]进行查询。
方法二:使用 T-SQL 脚本配置
对于自动化部署和脚本管理,使用 T-SQL 命令更为高效,我们主要使用 sp_addlinkedserver 和 sp_addlinkedsrvlogin 这两个存储过程。
创建链接服务器
我们需要告诉 SQL Server 有一台外部服务器可供访问:
EXEC master.dbo.sp_addlinkedserver
@server = N'TargetServerName', -- 链接服务器的名称(本地别名)
@srvproduct = N'', -- 产品名称
@provider = N'SQLNCLI', -- OLE DB 提供程序
@datasrc = N'192.168.1.100'; -- 目标服务器的 IP 地址或主机名
配置登录映射
创建链接服务器后,我们需要指定使用哪个账号去登录目标服务器:
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'TargetServerName', -- 对应上面创建的链接服务器名
@useself = N'False', -- 不使用当前连接的登录账号
@locallogin = NULL, -- 不限制本地登录用户
@rmtuser = N'target_user', -- 目标服务器的登录用户名
@rmtpassword = N'target_password'; -- 目标服务器的密码
测试连接
配置完成后,可以执行以下命令验证是否成功:
SELECT * FROM [TargetServerName].[你的目标数据库名].[dbo].[你的目标表名]
常见问题排查
如果你发现无法成功 SQL Server 连接另一台服务器,请按以下顺序排查:
- 错误代码 53:通常表示网络不可达或协议未启用。
- 错误代码 18456:表示身份验证失败,请检查用户名密码是否正确,以及目标服务器是否开启了混合模式。
- 性能问题:跨服务器查询(分布式查询)的性能通常比本地查询慢,因为数据需要在网络中传输,在编写查询时,尽量避免全表扫描,
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

