我最近将我的SQL Server从2005升级到2014(链接服务器),我注意到调用exec命令执行升级后的链接服务器上的存储过程的存储过程之一失败并出现错误
无法在sys.servers.Verify中找到指定了正确服务器名称的服务器“服务器名称”。如有必要,执行存储过程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失败(它在升级之前有效).SQL Server 2005和SQL Server 2014之间是否存在导致此失败的SQL语法差异?
我想出了这个问题。链接的服务器已正确创建。但是,在服务器升级并切换后,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'
如果它会帮助你那么请upvote。
由于链接服务器名称中有额外的空间,我遇到了问题。 “SERVER1,1234”而不是“SERVER1,1234”