最近、SQL Serverを2005から2014(リンクサーバー)にアップグレードしましたが、execコマンドを呼び出して、アップグレードされたリンクサーバーでストアドプロシージャを実行するストアドプロシージャの1つがエラーで失敗していることに気付きました
Sys.serversでサーバー 'server name'が見つかりませんでした。正しいサーバー名が指定されていることを確認してください。必要に応じて、ストアドプロシージャsp_addlinkedserverを実行して、サーバーをsys.serversに追加します。
問題は、リンクサーバーが存在し、リンクサーバーからテーブルをクエリできることを確認するテストを行ったことです。リンクサーバーが正しく構成されているかどうかを確認するために行ったチェックは次のとおりです。
- 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)
ただし、エラーで失敗しているものは以下です
exec linkedserver.database.dbo.failing_storedprocedure @id,'load ','v2',@file_name, @list_id = @listid output;
リンクサーバーを再作成し、RPCを有効にしました。ストアドプロシージャの実行権限を付与しました。リンクサーバーでレコードを選択して他のストアドプロシージャを実行できますが、上記のexecは失敗します(アップグレード前に機能していました)。SQLServer 2005とSQL Server 2014の構文に違いがあり、失敗しますか?
私は問題を理解しました。リンクサーバーが正しく作成されました。ただし、サーバーをアップグレードして切り替えた後、sys.servers
のサーバー名は古いサーバー名のままでした。
古いサーバー名を削除して、新しいサーバー名を新しいサーバーのsys.servers
に追加する必要がありました
sp_dropserver 'Server_A'
GO
sp_addserver 'Server',local
GO
まず、リンクサーバーがこのクエリのリストに含まれていることを確認します
select name from sys.servers
存在しない場合は、リンクサーバーに追加してみてください
EXEC sp_addlinkedserver @server = 'SERVER_NAME' --or may be server ip address
そのリンクサーバーへのログイン後
EXEC sp_addlinkedsrvlogin 'SERVER_NAME'
,'false'
,NULL
,'USER_NAME'
,'PASSWORD'
その後、あなたは何でもしたいことができます、あなたのローカルサーバーのようにそれを扱います
exec [SERVER_NAME].[DATABASE_NAME].dbo.SP_NAME @sample_parameter
最後に、リンクサーバーリストからそのサーバーをドロップできます。
sp_dropserver 'SERVER_NAME', 'droplogins'
それがあなたを助けるならば、賛成してください。