web-dev-qa-db-fra.com

Impossible de trouver le serveur 'nom du serveur' dans sys.servers. SQL Server 2014

J'ai récemment mis à niveau notre serveur SQL Server de 2005 à 2014 (serveur lié) et je constate que l'une des procédures stockées qui appelle la commande exec pour exécuter une procédure stockée sur le serveur lié mis à niveau échoue avec l'erreur 

Impossible de trouver le serveur 'nom du serveur' dans sys.servers.Vérifiez que le nom de serveur correct a été spécifié. Si nécessaire, exécutez la procédure stockée sp_addlinkedserver pour ajouter le serveur à sys.servers.

Le problème est que le serveur lié existe et j'ai effectué des tests pour vérifier que je peux interroger les tables à partir du serveur lié. Voici les vérifications que j'ai effectuées pour voir si le serveur lié est configuré correctement.

 - select name from sys.servers -- > Lists the linked server 
 - select top 10 * from linkedserver.database.dbo.table -->  Gets top 10 records 
 - exec linkedserver.database.dbo.storedproc --> Executes the stored procedure (I created a test stored procedure on the linked server and I can execute it)

Cependant celui qui échoue avec l'erreur est en dessous

exec linkedserver.database.dbo.failing_storedprocedure  @id,'load ','v2',@file_name, @list_id = @listid output;

J'ai recréé le serveur lié et RPC est activé. J'ai accordé le droit d'exécution à la procédure stockée. Je peux sélectionner des enregistrements et exécuter d'autres procédures stockées sur le serveur lié, mais l'exécutable ci-dessus a échoué (cela fonctionnait avant la mise à niveau). Existe-t-il une différence de syntaxe entre SQL Server 2005 et SQL Server 2014 qui provoque l'échec?

7
VK_217

J'ai compris le problème. Le serveur lié a été créé correctement. Cependant, après la mise à niveau du serveur et le basculement du nom du serveur dans sys.servers, l'ancien nom du serveur était toujours présent.

J'ai dû supprimer l'ancien nom du serveur et ajouter le nouveau nom du serveur à sys.servers sur le nouveau serveur.

sp_dropserver 'Server_A'
GO
sp_addserver  'Server',local
GO
6
VK_217

Vérifiez d'abord que votre serveur lié est dans la liste par cette requête

select name from sys.servers

S'il n'existe pas, essayez d'ajouter au serveur lié. 

EXEC sp_addlinkedserver @server = 'SERVER_NAME' --or may be server ip address

Après cette connexion à ce serveur lié par

EXEC sp_addlinkedsrvlogin 'SERVER_NAME'
                         ,'false'
                         ,NULL
                         ,'USER_NAME'
                         ,'PASSWORD'

Ensuite, vous pouvez faire ce que vous voulez, traitez-le comme votre serveur local

exec [SERVER_NAME].[DATABASE_NAME].dbo.SP_NAME @sample_parameter

Enfin, vous pouvez supprimer ce serveur de la liste des serveurs liés en 

sp_dropserver 'SERVER_NAME', 'droplogins'

Si cela peut vous aider alors s'il vous plaît upvote.

0
Humayoun_Kabir