Мы находимся в процессе замены нашего SQL Server и решили, что переименовать сам сервер будет намного проще, чем изменить все остальное, чтобы указать на новое имя. Мы нашли инструкции по изменению имени экземпляра SQL Server в соответствии с именем компьютера, которые выглядят следующим образом:
sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local
Хотя SQL Enterprise Manager, похоже, не любит их вместе. Мне пришлось изменить его на следующее, чтобы они работали вместе:
sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO
Это неплохо, но я бы предпочел, чтобы все было более автоматизировано. Поскольку @@ ServerName возвращает имя экземпляра, я понял, как автоматизировать первую строку:
sp_dropserver @@ServerName; GO
Я также узнал, что SERVERPROPERTY ('ServerName') должен возвращать имя компьютера, поэтому я подумал, что мог бы использовать это для автоматизации второй части, но это не сработало:
sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO
Я попытался установить переменную, которую мне все равно нужно сделать для обновления заданий агента 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
Вот готовый сценарий с помощью магмы и Санкара Редди:
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