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?
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
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.