无法在 sys.servers 中找到服务器 'server name'。 SQL 服务器 2014

Could not find server 'server name' in sys.servers. SQL Server 2014

我最近将我们的 SQL 服务器从 2005 升级到 2014(链接服务器),我注意到调用 exec 命令以在升级后的链接服务器上执行存储过程的存储过程之一失败错误

Could not find server 'server name' in sys.servers.Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to 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 enabled.I已经授予了对存储过程的执行权限。我可以 select 记录并在链接服务器上执行其他存储过程,但是上面的执行失败了(它在升级之前工作)。SQL Server 2005 和 SQL 之间是否存在语法差异导致此失败的服务器 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'

如果对你有帮助,请点个赞。

由于链接服务器名称中的额外 space,我遇到了问题。 "SERVER1, 1234" 代替 "SERVER1,1234"