我最近将我们的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之间是否存在导致此失败的语法差异?
答案 0 :(得分:6)
我想出了这个问题。链接的服务器已正确创建。但是,在服务器升级并切换后,sys.servers
中的服务器名称仍具有旧服务器名称。
我不得不删除旧服务器名称并将新服务器名称添加到新服务器上的sys.servers
sp_dropserver 'Server_A'
GO
sp_addserver 'Server',local
GO
答案 1 :(得分:1)
首先通过此查询检查您的链接服务器是否在列表中
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'
如果有帮助,请投票。
答案 2 :(得分:0)
我有问题,因为链接服务器的名称中有多余的空格。 “ SERVER1,1234” 代替 “ SERVER1,1234”