SQL Server @@ SERVERNAME返回旧机器名?

时间:2013-01-07 15:03:24

标签: sql-server sql-server-2008-r2

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

8 个答案:

答案 0 :(得分:56)

众所周知并记录在案,请参阅Rename a Computer that Hosts a Stand-Alone Instance of SQL Server

  

当您更改运行SQL Server的计算机的名称时,   在SQL Server启动期间识别新名称。你没有   再次运行安装程序以重置计算机名称。相反,使用   以下步骤更新存储在其中的系统元数据   sys.servers并由系统函数@@ SERVERNAME:

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

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

  

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

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

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

  

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

答案 1 :(得分:3)

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

SELECT SERVERPROPERTY('MachineName')

答案 2 :(得分:3)

有时,当您运行There are still remote logins or linked logins for the server 'yourServerName'

时,您可能会收到错误sp_dropserver 'oldServerName';

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

答案 3 :(得分:2)

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

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

2)转到 * HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server * 您将看到大量编号的目录(100,120,130 ....)

OR

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

3)浏览所有编号的目录,看看是否可以在

中找到“ Machines ”目录

4)找到“计算机”后,将 OriginalMachineName 键更改为您希望的服务器名称。这是第一次安装Windows时的原始机器名称。

PS:我的路径是OriginalMachineName&gt; 计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 130 \ Machines

答案 4 :(得分:1)

sp_addserver会修复它.....

答案 5 :(得分:0)

就我而言,我不能删除旧名称;我可以重新启动MSSQL或VM,@@SERVERNAME始终返回旧名称,而其他所有方法(包括SERVERPROPERTY('SERVERNAME'))都返回新名称,这会引起各种问题。事实证明,删除 new 名称并重新添加(当然,然后重新启动MSSQL)可以解决此奇怪的问题:

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

答案 6 :(得分:-2)

感谢您之前的回答,帮助我解决了我的问题。

只是给别人留言,如果你想要从@@ SERVERNAME返回的整个服务器名称,你可以使用SELECT SERVERPROPERTY('ServerName');

答案 7 :(得分:-2)

数据库名称也区分大小写,以防您运行sp_dropserver然后sp_addserver,就像其他人所说的那样,并且没有使用SELECT @@ SERVERNAME进行更改。只需检查您是否正确拼写了数据库名称。