我们正在取代我们的SQL Server,并决定重命名服务器本身比改变其他所有指向新名称要容易得多。 我们find了更改SQL Server实例名称的说明,以匹配如下所示的计算机名称:
sp_dropserver 'OLDSERVER' sp_addserver 'NEWSERVER', local
虽然SQL企业pipe理器似乎不喜欢那些在一起。 我不得不把它改变成以下的一起工作:
sp_dropserver 'OLDSERVER'; GO sp_addserver 'NEWSERVER', 'local'; GO
这不坏,但我更喜欢事情更自动化。 由于@@ ServerName返回实例的名称,我想出了如何自动化第一行:
sp_dropserver @@ServerName; GO
我还了解到,SERVERPROPERTY('ServerName')应该返回计算机名称,所以我想我可以使用它来自动化第二部分,但是这不起作用:
sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO
我尝试设置一个variables,我需要做任何更新SQL代理作业,但是也没有工作:
DECLARE @srv sysname; SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname); sp_addserver @srv, 'local'; GO
“sp_addserver”附近的语法不正确。
我非常希望不必将新的服务器名称硬编码到脚本中,以使其更容易重用。 有人有什么想法?
这是一个脚本来做你想做的事情:
DECLARE @var1 nvarchar(50) DECLARE @var2 nvarchar(50) SET @var1 = convert(nvarchar(50),@@SERVERNAME) SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName')) EXEC sp_dropserver @var1 EXEC sp_addserver @var2, 'local' GO
学分: http ://www.myitforum.com/articles/5/view.asp? id=4983
在岩浆和Sankar Reddy的帮助下,这里是完成的脚本:
DECLARE @var1 nvarchar(50) DECLARE @var2 nvarchar(50) SET @var1 = convert(nvarchar(50),@@SERVERNAME) SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName')) EXEC sp_dropserver @var1 EXEC sp_addserver @var2, 'local' UPDATE msdb.dbo.sysjobs SET originating_server = @var2 GO
岩浆发现的文章中有一个小错误,那就是它试图删除新的名字并添加旧的名字,而不是删除旧的名字并添加新的名字。 我还添加了一个更新查询来修复SQL代理作业。 请注意,这只适用于多服务器环境中的主服务器。 我的环境是单服务器环境,所以适用于我的情况。
Declare @OldName varchar(50), @NewName Varchar(50) Select @OldName = CONVERT(VARCHAR(50),@@SERVERNAME) ; --SELECT @OldName [OLDNAME] Select @NewName = CONVERT(VARCHAR(50),SERVERPROPERTY('ServerName')); --SELECT @NewName [NEWNAME] EXEC sp_dropserver @OldName; EXEC sp_addserver @server = '@NewName',@local='local'; GO