查看SQL表格的服务器名,最直接的办法是执行 SELECT @@SERVERNAME,或者在SSMS(SQL Server Management Studio)的对象资源管理器顶部直接查看。 下面我会从图形界面、T-SQL命令、连接字符串等几个实战场景,把这几种方法掰开揉碎讲清楚,保证你看完就能上手。
图形界面查看服务器名:适合刚入门的新手
如果你刚接触数据库,用鼠标点一点就能找到答案,这是最直观的方式。
打开SSMS,登录的时候,弹出的“连接到服务器”窗口里,“服务器名称”那一栏显示的名字,就是你要找的服务器名,这个名称可能是电脑的主机名,也可能带着实例名,DESKTOP-ABC123\SQLEXPRESS。
如果你已经登录进去了,想再次确认,看对象资源管理器的最顶部一行字,那一行显示的完整路径,包含了服务器名和实例名(如果有的话),比如显示 DESKTOP-ABC123\SQLEXPRESS (SQL Server 16.0.1000),前面的 DESKTOP-ABC123\SQLEXPRESS 就是完整的服务器名。
用T-SQL语句查询服务器名:脚本和运维的常用手段
在写存储过程或者做数据同步时,经常需要动态获取服务器名,这时候用代码查询是最准确的,因为SSMS界面显示的名称不一定能代表当前的机器身份。
执行下面这句SQL,返回的就是当前连接的服务器名:
SELECT @@SERVERNAME AS ServerName;
这句命令非常简单,返回一行一列,值就是服务器实例的名字,DESKTOP-ABC123 或者 DESKTOP-ABC123\SQLEXPRESS。
如果你想看更详细的信息,包括机器名、实例名和版本号,可以使用系统视图:
SELECT
SERVERPROPERTY('MachineName') AS MachineName,
SERVERPROPERTY('InstanceName') AS InstanceName,
SERVERPROPERTY('ServerName') AS ServerName;
这里有个细节需要注意:如果默认实例没配置实例名,InstanceName 返回的是 NULL;ServerName 的结果和 @@SERVERNAME 是基本一致的,在很多局域网部署中,机器名和服务器名可能是一致的,但服务器名不一定是IP地址。
查出服务器名后,怎么定位对应的IP地址
知道了服务器名,其实只是第一步,有时候你在写连接字符串(比如在Java、Python或者web.config文件里),可能只知道数据库在本机上,但不知道IP。
从服务器名查到IP地址的常用方法
如果是SQL Server,可以直接查询 sys.dm_exec_connections 这个动态管理视图:
SELECT
dec.local_net_address AS LocalIP,
dec.local_tcp_port AS Port
FROM sys.dm_exec_connections AS dec
WHERE dec.session_id = @@SPID;
local_net_address 就是本机用于连接的IP地址,local_tcp_port 是SQL Server监听的端口,通常是1433,这个方法能直接解决你“知道服务器名但不知道IP”的尴尬。
用命令行工具做逆查询
如果你在服务器本机上,打开命令提示符,输入 ipconfig 可以列出所有网卡的IPv4地址,如果你手里只有服务器名,想反查IP,输入:
ping 服务器名 -4
ping DESKTOP-ABC123 -4,系统会解析出对应的IPv4地址,不过这个操作适合在同一个局域网内,如果服务器名解析不到,可以查一下DNS配置。
远程连接时,怎么填写服务器名才正确
很多人在办公室连不上开发库,就是因为本地服务器名和远程服务器名概念混淆,你在本地控制台上看到的名字,如果拿到公网或者跨网段的环境,是连不上的。
远程连接时填写的服务器名,通常有三种形式:
- IP地址形式:直接用IP地址连接,
168.1.100,如果端口不是默认的1433,要写成168.1.100,14333。 - 域名形式:
sql.company.com,这种写法比较稳定,不会因为IP变更而失效。 - 主机名\实例名:
WEBSERVER\SQLEXPRESS,这种写法要求你的机器能通过NetBIOS协议解析到主机名WEBSERVER。
行业共识认为,跨网段远程连接时,优先用IP地址或者域名,不要用NetBIOS主机名,因为路由器和防火墙一般不支持广播解析。
常见认知误区:本机服务器名和注册服务器名的区别
这里想专门提醒一个坑。你执行 SELECT @@SERVERNAME 得到的结果,和SSMS的“已注册的服务器”窗口中显示的服务器名,不一定是同一个。
“已注册的服务器”只是一个快捷方式,相当于一个书签,里面存的服务器名可能和实际的机器名不一样,比如你在一台电脑上通过SSMS注册了一个名为 PROD_SERVER_01 的服务器,但实际那台机器的名字是 DB_HOST_01,这种情况下,连接上以后 @@SERVERNAME 返回的依然是 DB_HOST_01(前提是SQL Server安装时默认使用了机器名)。
编写连接字符串和配置文件时,可以提前做的检查
如果你遇到过在SQL Server Management Studio里能连上,但程序代码里连不上的情况,大概率是连接字符串的服务器名写错了,下面这个清单可以帮你逐步排查:
- 先在服务器本机执行
SELECT @@SERVERNAME,拿到准确实例名。 - 检查连接字符串里的
Data Source或Server字段,是否与这个实例名完全一致。 - 如果使用了命名实例,必须带上实例名,不能只写主机名,比如正确写法是
DESKTOP-ABC123\SQLEXPRESS,而不是只写DESKTOP-ABC123。 - 如果连接字符串写的是IP,要确认SQL Server开启了TCP/IP协议,默认情况下,SQL Server Express版本不开启TCP/IP协议。
- 在服务器的Sql Server配置管理器中,检查“SQL Server服务”里的实例名称状态,确保正在运行。
上述配置问题导致的连接失败,占了远程连接故障里相当大一部分比例。
如何验证自己查到的服务器名正确无误
你确认了服务器名之后,想验证一下这个服务器名到底通不通,最简单的办法是使用 sqlcmd 命令行工具,在命令提示符里输入:
sqlcmd -S DESKTOP-ABC123\SQLEXPRESS -E
如果屏幕上出现 1> 提示符,说明 DESKTOP-ABC123\SQLEXPRESS 这个服务器名是有效的,而且你能以Windows身份登录,然后输入 SELECT @@SERVERNAME 并回车,再输入 GO 回车,就能看到输出的服务器名。
如果再高级一点,你可以用 osql 老工具,或者直接用PowerShell的 Invoke-Sqlcmd,但sqlcmd已经足够用了。
SQL表格的服务器名与数据库名的区别
写SQL代码时,有时候会在代码里看到 [服务器名].[数据库名].[架构名].[表名] 这样的四部分全限定名,这里需要明确一点,这个 [服务器名] 部分,和上面提到的 @@SERVERNAME 结果是一致的,它不是数据库名,也不是表名,它表示的是你当前连接的那个SQL Server实例,[DESKTOP-ABC123].[mydb].[dbo].[users],如果你在同一台服务器上的另一个数据库里查询,全限定名中的服务器名部分是不变的。
对于大多数单机应用来说,查询SQL表根本不需要写服务器名,直接用 数据库名.架构名.表名 就够了,只有在跨服务器查询时(比如Linked Server),服务器名才必须写出来。
查看服务器名的SQL语句在MySQL等其他数据库里怎么用
这里补充一点,如果你用的是MySQL或者PostgreSQL,语法是不同的。MySQL使用 SELECT @@hostname; 来查看服务器主机名,使用 SELECT @@port; 查看端口。 而PostgreSQL使用 SHOW server_name; 或者 SELECT current_database();(返回的是数据库名,不是服务器名),SQL Server和MySQL在这一块命令语法存在明显差异,所以搜索结果时要注意甄别。
改了服务器名之后,一定要同步更新系统元数据
这是一个冷门坑,如果你在操作系统层面把Windows机器重命名了(比如从 TEST_01 改成了 PROD_02),但SQL Server内部记录的服务器名还停在旧名字上,此时执行 SELECT @@SERVERNAME 返回的依然是旧的 TEST_01,修复方法是以管理员身份执行:
sp_dropserver 'TEST_01'; GO sp_addserver 'PROD_02', local; GO
然后重启SQL Server服务,很多用户在迁移服务器或者改名后遇到备份、镜像问题,往往就是这一步漏掉了。
Q&A:sql server查看服务器名常见问题
在SSMS中连接时填写的“服务器名”到底该写什么内容?
如果是本机默认实例,通常写一个点 或 localhost 或机器名都可以连上,如果需要指定端口,则写 localhost,1433,如果是命名实例,写 机器名\实例名,DESKTOP-ABC123\SQLEXPRESS,SQLEXPRESS 是实例名。
查看了服务器名,发现它的值居然带反斜杠,这是服务器名还是实例名?
反斜杠前面的部分是机器名,反斜杠后面的部分是SQL Server实例名,也就是说,DESKTOP-ABC123\SQLEXPRESS 代表这台机器的机器名是 DESKTOP-ABC123,SQL Server实例名是 SQLEXPRESS,既不是完整的机器名,也不等于IP地址。
执行 SELECT @@SERVERNAME 的结果为NULL,代表什么?
代表当前的SQL Server服务没有注册为命名实例,最常见的情况是你安装成了默认实例,这时服务器名就等同于机器名,你可以在Windows服务列表里查一下服务名,MSSQLSERVER 结尾的,都是默认实例,连接时直接写机器名或IP地址即可;服务名带 符号的,后面跟着的就是实例名。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/727380.html


