Changer de nom de serveur SQL

Une question fréquemment posée : quelles opérations sont nécessaires pour changer le nom d'un serveur SQL Server ?

Voici quelques détails sur le sujet, ainsi que la procédure que j'utilise lorsque je déploie des machines "généralisées" avec sysprep, sur lesquelles SQL Server est déjà installé.
 

La première question qui se pose est : s'agit-il bien du nom de machine windows, et non du nom d'instance ?

Si l'opération est simple lorsque c'est le nom de l'ordinateur qui doit changer, la modification du nom d'instance (instance nommée) nécessite une réinstallation. Au pire, à défaut, on peut jouer avec les alias côté client sans renommer l'instance...

Pour le renommage d'une machine windows, la procédure est la suivante, avec simplement 2 commandes SQL pour remettre à jour la table système sys.servers. A faire après avoir renommé l'ordinateur.

Dans une fenêtre de requête, lancez les commandes suivantes (remplacer les noms de serveur par vos propres noms), puis redémarrez l'instance :

EXEC sp_dropserver 'old_name'
EXEC sp_addserver 'new_name','local'

Je rencontre un autre problème lorsqu'il s'agit de déployer des ordinateurs généralisés avec sysprep, ce que je fais par exemple pour un ensemble de VM Azure créées à partir d'une image pour une salle de formation virtuelle. Comme je n'ai pas envie de passer sur chaque machine pour faire cette opération, j'utilise la procédure stockée suivante que j'ai installée dans l'image d'origine et configurée pour se lancer au premier démarrage de SQL Server. Il ne me restera plus qu'a redémarrer les VM pour que la configuration soit prise en compte...

USE master
GO
CREATE OR ALTER proc [dbo].[InitConfig] AS
DECLARE @NewServerName NVARCHAR(128), @OldServerName NVARCHAR(128);
SELECT @NewServerName=CAST(SERVERPROPERTY('ServerName') AS NVARCHAR(128)),
  @OldServerName=@@SERVERNAME;
IF @NewServerName<>@OldServerName BEGIN
  DECLARE @SQLCMD NVARCHAR(MAX) =N'';
  SET @SQLCMD=@SQLCMD+N'exec sp_dropserver '''+@OldServerName+N'''; '+CHAR(10);
  SET @SQLCMD=@SQLCMD+N'exec sp_addserver '''+@NewServerName+N''',''LOCAL''';
  EXEC (@SQLCMD);
END;
GO
EXEC sp_procoption InitConfig, 'STARTUP', 'ON'