Ich habe kürzlich unseren SQL Server von 2005 auf 2014 (Verbindungsserver) aktualisiert, und ich stelle fest, dass eine der gespeicherten Prozeduren, die den exec-Befehl zum Ausführen einer gespeicherten Prozedur auf dem aktualisierten Verbindungsserver aufruft, mit dem Fehler fehlschlägt
Server 'Servername' konnte in sys.servers nicht gefunden werden. Stellen Sie sicher, dass der richtige Servername angegeben wurde. Führen Sie ggf. die gespeicherte Prozedur sp_addlinkedserver aus, um den Server zu sys.servers hinzuzufügen.
Das Problem ist, dass der Verbindungsserver existiert und ich habe Tests durchgeführt, um sicherzustellen, dass ich die Tabellen vom Verbindungsserver abfragen kann. Hier sind die Überprüfungen, die ich durchgeführt habe, um zu sehen, ob der Verbindungsserver korrekt konfiguriert ist.
- 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)
Der Fehler, der mit dem Fehler ausfällt, befindet sich jedoch unten
exec linkedserver.database.dbo.failing_storedprocedure @id,'load ','v2',@file_name, @list_id = @listid output;
Ich habe den Verbindungsserver neu erstellt, und RPC ist aktiviert. Ich habe die Ausführungsberechtigung für die gespeicherte Prozedur erteilt. Ich kann Datensätze auswählen und andere gespeicherte Prozeduren auf dem Verbindungsserver ausführen, aber der obige Exec schlägt fehl (es hat vor dem Upgrade funktioniert). Gibt es einen Syntaxunterschied zwischen SQL Server 2005 und SQL Server 2014, der dazu führt, dass dies fehlschlägt?
Ich habe das Problem herausgefunden. Der Verbindungsserver wurde korrekt erstellt. Nachdem der Server jedoch aktualisiert und umgestellt wurde, hatte der Servername in sys.servers
noch den alten Servernamen.
Ich musste den alten Servernamen löschen und den neuen Servernamen auf dem neuen Server zu sys.servers
hinzufügen
sp_dropserver 'Server_A'
GO
sp_addserver 'Server',local
GO
Überprüfen Sie zunächst, ob Ihr Verbindungsserver durch diese Abfrage in der Liste enthalten ist
select name from sys.servers
Wenn dies nicht der Fall ist, versuchen Sie, den Verbindungsserver hinzuzufügen
EXEC sp_addlinkedserver @server = 'SERVER_NAME' --or may be server ip address
Nach diesem Login an diesem Verbindungsserver von
EXEC sp_addlinkedsrvlogin 'SERVER_NAME'
,'false'
,NULL
,'USER_NAME'
,'PASSWORD'
Dann können Sie tun, was Sie möchten, wie Ihren lokalen Server
exec [SERVER_NAME].[DATABASE_NAME].dbo.SP_NAME @sample_parameter
Schließlich können Sie diesen Server aus der Liste der verknüpften Server löschen
sp_dropserver 'SERVER_NAME', 'droplogins'
Wenn es Ihnen helfen wird, dann stimmen Sie bitte zu.