36

我刚刚在我的 SQL Server 2008 R2 中偶然发现了一个问题 - 当我调用 时@@SERVERNAME,它返回的是我旧计算机的机器名称,而不是当前的机器名称。为什么是这样?我该如何解决?SQL Server 不知何故记住了旧的机器名称。

4

7 回答 7

63

这是众所周知的和记录在案的,请参阅重命名承载 SQL Server 独立实例的计算机

当您更改运行 SQL Server 的计算机的名称时,新名称会在 SQL Server 启动过程中被识别。您不必再次运行安装程序来重置计算机名称。相反,请使用以下步骤更新存储在 sys.servers 中并由系统函数 @@SERVERNAME 报告的系统元数据:

sp_dropserver <old_name>;
GO
sp_addserver <new_name>, local;
GO

您还可以使用SERVERPROPERTY('MachineName')which 保证始终返回更新后的名称:

MachineName运行服务器实例的 Windows 计算机名称。对于群集实例,即在 Microsoft 群集服务上的虚拟服务器上运行的 SQL Server 实例,它返回虚拟服务器的名称。

SERVERPROPERTY('ComputerNamePhysicalNetBIOS')将返回集群中的当前活动节点,或与非集群实例上的“MachineName”相同的值。

编辑(由第 3 方)添加 WEFX 的评论,以防有人错过:

此外,您需要重新启动 SQL 服务(或重新启动 SQL Server)才能SELECT @@SERVERNAME返回准确的(新)服务器名称

于 2013-01-07T15:08:58.620 回答
4

我已经尝试了所有可能的解决方案,但批准的答案对我不起作用。我浏览了一下并想出了完美的解决方案。我希望有人觉得这很有帮助。

1) Window + R键打开注册表。输入注册表

2) 转到*HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server*你会看到很多编号的目录 ( 100,120,130 ....)

或者

您只需在注册表编辑器的地址栏中键入“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\”

3)浏览所有编号的目录,看看你是否可以在里面找到“机器”目录

4) 找到“ Machines ”后,将OriginalMachineName键更改为您想要的服务器名称。这实际上是第一次安装 Windows 时的原始机器名称。

PS:我的路径是 OriginalMachineName > Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\Machines

于 2017-08-17T12:36:55.557 回答
3

有时There are still remote logins or linked logins for the server 'yourServerName'运行时可能会出错sp_dropserver 'oldServerName';

如果您遇到此类错误,请尝试运行sp_dropserver 'oldServerName', 'droplogins';

于 2014-11-10T09:11:58.153 回答
3

我怀疑这是因为该实例是默认安装并且当时继承了机器名称并保留了它。尝试这个?

SELECT SERVERPROPERTY('MachineName')
于 2013-01-07T15:07:44.733 回答
1

sp_addserver将修复它.....

于 2013-01-07T15:09:36.700 回答
0

对于托管 SQL Server 默认实例的重命名计算机,请运行以下过程:

EXEC sp_dropserver '<old_name>';  
GO  
EXEC sp_addserver '<new_name>', local;  
GO  

重新启动 SQL Server 实例。

对于承载 SQL Server 命名实例的重命名计算机,请运行以下过程:

EXEC sp_dropserver '<old_name\instancename>';  
GO  
EXEC sp_addserver '<new_name\instancename>', local;  
GO 
于 2021-11-16T09:50:36.250 回答
-1

就我而言,我不能放弃名称;我可以根据需要重新启动 MSSQL 或 VM,@@SERVERNAME继续返回旧名称,而其他所有方法(包括SERVERPROPERTY('SERVERNAME'))都返回新名称,这会导致各种问题。原来删除名称并重新添加它(当然还要重新启动 MSSQL)解决了这个奇怪的问题:

sp_dropserver <new_name>; GO
sp_addserver <new_name>, local; GO
于 2019-01-30T20:42:42.513 回答