核心概念:服务器名的两种类型
在讨论如何获取服务器名之前,首先要理解 SQL Server 中通常涉及到的两种“服务器名”:

-
计算机名
- 这是指运行 SQL Server 实例的物理或虚拟机器的操作系统名称。
DESKTOP-JDOE、SRV-DB-PROD01、WIN-SQL-2025。- 这是最基础的服务器标识符。
-
SQL Server 服务器名 / 连接名
- 这是客户端用来连接 SQL Server 实例的名称,它可以是计算机名,也可以是其他更复杂的名称。
- 默认实例: SQL Server 是作为默认实例安装的,那么服务器名通常就是计算机名。
DESKTOP-JDOE。 - 命名实例: SQL Server 是作为命名实例安装的(例如在安装时指定了实例名
SQLEXPRESS),那么服务器名就是计算机名\实例名。DESKTOP-JDOE\SQLEXPRESS。 - 虚拟网络名称: 在 Always On 可用性组、故障转移群集或某些云部署中,客户端会连接到一个虚拟的、独立的网络名称,而不是具体的计算机名。
AG-Listener-01。
理解了这两个概念,我们就能更准确地找到我们需要的信息。
如何获取服务器名(按场景分类)
您在 SQL Server 内部(例如使用 SSMS 或 Management Studio)
这是最简单直接的情况。

方法 1:使用 T-SQL 查询(推荐)
您可以在任何查询窗口中执行以下任意一条命令来获取服务器名。
-- 方法 1.1: 获取完整的连接服务器名(包含实例名)
SELECT @@SERVERNAME AS [Server Name];
-- 方法 1.2: 获取计算机名(操作系统主机名)
SELECT SERVERPROPERTY('MachineName') AS [Machine Name];
-- 方法 1.3: 获取 SQL Server 实例名
SELECT SERVERPROPERTY('InstanceName') AS [Instance Name];
-- 方法 1.4: 获取 SQL Server 版本信息(常用于确认环境)
SELECT SERVERPROPERTY('ProductVersion') AS [Product Version],
SERVERPROPERTY('Edition') AS [Edition];
解释:
@@SERVERNAME:返回 SQL Server 实例的名称,这个名称在安装时或之后被设置,它是最常用的连接标识符。SERVERPROPERTY('MachineName'):返回运行 SQL Server 的操作系统的计算机名,这在故障排查时非常有用。SERVERPROPERTY('InstanceName'):返回实例名,如果是默认实例,则返回NULL。
方法 2:使用图形界面(SSMS)

- 在 对象资源管理器 中,连接到您的 SQL Server 实例。
- 顶部导航栏会直接显示连接的服务器名。
- 右键点击服务器名,选择 “属性” (Properties)。
- 在弹出的窗口中,左侧选择 “常规” (General),右侧可以看到“服务器名称”和“操作系统”等信息。
您在操作系统的命令行中(CMD 或 PowerShell)
当您无法登录到 SQL Server,但需要从服务器本身或通过网络查询时,这些方法非常有用。
方法 1:使用命令提示符
打开 cmd.exe,然后执行以下命令之一:
-- 查看完整的计算机名 hostname -- 查看计算机名和 IP 地址信息(包含主机名) ipconfig /all
方法 2:使用 PowerShell
打开 PowerShell,执行以下命令:
# 查看完整的计算机名 $env:COMPUTERNAME # 查看更详细的网络信息,包含主机名 Get-NetAdapter | Format-List Name, InterfaceDescription, MacAddress, LinkSpeed, Status Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "以太网" # 替换为您的网卡名称
您在客户端计算机上,需要连接远程 SQL Server
当您需要从另一台电脑连接数据库时,您需要知道目标服务器的名称或 IP 地址。
方法 1:使用 SQL Server Management Studio (SSMS)
- 打开 SSMS,在“连接到服务器”对话框中。
- 服务器名称 字段就是您需要填写的地方。
- 您可以尝试输入以下内容来测试连接:
- 计算机名 (如果对方是默认实例):
SRV-DB-PROD01 - 计算机名\实例名 (如果对方是命名实例):
SRV-DB-PROD01\SQLEXPRESS - IP 地址 (如果对方配置了允许):
168.1.100 - 虚拟网络名称 (如果对方是 AG 或 FCI):
AG-Listener-01
- 计算机名 (如果对方是默认实例):
方法 2:使用网络工具
如果您不知道服务器名称,可以使用网络工具来查找:
-
ping 命令:如果您知道服务器的 IP 地址,可以用它来反向解析主机名。
ping 192.168.1.100
如果配置了 DNS,您可能会看到类似
Pinging SRV-DB-PROD01 [192.168.1.100]的输出。 -
端口扫描:如果只知道 IP 地址,可以扫描 SQL Server 的默认端口
1433(TCP) 来确认服务是否在线,可以使用工具如PortQry或nmap。portqry -n 192.168.1.100 -e 1433
-
DNS 查询:如果您在域环境中,可以询问网络管理员或直接查询 DNS 服务器来查找特定名称的记录。
您是应用程序开发者(C#)
在应用程序代码中,您通常不需要“获取”服务器名,而是使用一个配置好的连接字符串,连接字符串中包含了服务器名信息。
示例 C# 代码(从配置文件读取)
假设您的 appsettings.json 文件中配置了连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-JDOE\\SQLEXPRESS;Database=MyDB;User Id=myUser;Password=myPassword;"
}
}
您可以在 C# 代码中这样读取它:
using Microsoft.Extensions.Configuration;
// ... 在您的 Program.cs 或 Startup.cs 中
var builder = WebApplication.CreateBuilder(args);
// 从配置文件获取连接字符串
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
// 如果您想从中提取出服务器名部分,可以手动解析
// 或者使用 SqlConnectionStringBuilder 类来安全地解析
var builder = new SqlConnectionStringBuilder(connectionString);
string serverName = builder.DataSource; // 这将得到 "DESKTOP-JDOE\\SQLEXPRESS"
Console.WriteLine($"连接到的服务器是: {serverName}");
总结与最佳实践
| 场景 | 推荐方法 | 备注 |
|---|---|---|
| 在 SQL Server 内部 | SELECT @@SERVERNAME; 或 SERVERPROPERTY('MachineName') |
最准确、最常用。@@SERVERNAME 是连接名,MachineName 是物理机名。 |
| 在服务器命令行 | hostname 或 $env:COMPUTERNAME |
快速获取操作系统主机名。 |
| 从客户端连接 | 使用 SSMS 的连接对话框或网络工具 | 需要知道 计算机名、计算机名\实例名 或 IP 地址。 |
| 应用程序开发 | 使用连接字符串 | 服务器名应存储在配置文件中,而不是硬编码在代码里。 |
重要提示:
- 权限问题:查询
@@SERVERNAME和SERVERPROPERTY通常需要public角色的权限,几乎所有登录用户都有。 @@SERVERNAMEvsMachineName:@@SERVERNAME是 SQL Server 的逻辑名,可以在安装后通过sp_addserver或sp_dropserver命令进行更改,而MachineName是操作系统主机名,通常不会变,在大多数情况下,两者是一致的,但在复杂环境中(如重命名服务器后未同步),它们可能不同,故障排查时,两个信息都很有价值。
