Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Supprimer un serveur lié dans SQL Server à l'aide de T-SQL

Cet article fournit un exemple d'utilisation de Transact-SQL pour supprimer un serveur lié dans SQL Server.

Pour supprimer un serveur lié, utilisez le sp_dropserver procédure stockée système. Cela supprime un serveur de la liste des serveurs distants et liés connus sur l'instance locale de SQL Server. Cette procédure stockée accepte deux arguments :le nom du serveur et un argument facultatif pour supprimer toutes les connexions associées au serveur.

Exemple 1 – Supprimer un serveur lié et ses identifiants

Voici un exemple de suppression d'un serveur lié et de toutes les connexions associées pour ce serveur lié. Dans ce cas, le serveur lié s'appelle "Homer".

EXEC sp_dropserver 'Homer', 'droplogins';

Résultat :

Commands completed successfully.

Comme pour toute procédure stockée, vous pouvez également inclure explicitement les noms des arguments. Cela ne change cependant pas le résultat - le serveur lié est supprimé avec ses connexions associées.

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = 'droplogins';

Résultat :

Commands completed successfully.

Exemple 2 – Supprimer un serveur lié sans supprimer ses identifiants

Comme mentionné, les droplogins argument est facultatif. Vous pouvez également supprimer un serveur lié comme ceci :

EXEC sp_dropserver 'Homer';

Cependant, s'il existe des connexions associées au serveur lié, vous obtiendrez l'erreur suivante :

Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

Ce qui signifie que vous devrez ajouter les droplogins arguments.

Vous obtiendrez également une erreur si le serveur lié est configuré en tant qu'éditeur de réplication.

Encore une fois, vous pouvez inclure explicitement les noms des arguments si vous préférez :

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Résultat :

Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

Vous n'obtiendrez pas d'erreur s'il n'y a pas de connexion associée au serveur lié. Par exemple, si vous créez un serveur lié sans utiliser sp_addlinkedsrvlogin pour ajouter un login, vous pourrez supprimer le serveur sans utiliser les droplogins argument. Cela est vrai même si un mappage a été créé entre votre connexion locale et une sur le serveur distant.

Donc, si le serveur distant a une connexion appelée Marge, et que je l'exécute sous la connexion Marge sur le local serveur :

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.3,1433';

Un mappage est créé entre Marge sur le serveur local et Marge sur le serveur lié. Cela est possible car les deux connexions partagent les mêmes informations d'identification. Dans ce cas, il n'est pas nécessaire d'exécuter sp_addlinkedsrvlogin pour ajouter Marge comme identifiant pour le serveur lié.

Cependant, s'il n'y a pas de connexion correspondante pour Marge sur le serveur lié (ou s'il y en a, mais que les informations d'identification ne correspondent pas), le mappage ne se produira pas et Marge ne pourra pas accéder au serveur lié.

Dans tous les cas, l'exécution du code suivant réussira :

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Résultat :

Commands completed successfully.

Cela se termine avec succès pour Marge, même lorsqu'il existe un mappage entre sa connexion locale et le serveur lié (mais pas d'autres connexions pour le serveur lié).