VK_*_*217 14 sql sql-server stored-procedures linked-server sql-server-2014
我最近将我们的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)
Run Code Online (Sandbox Code Playgroud)
然而,失败的错误是在下面
exec linkedserver.database.dbo.failing_storedprocedure @id,'load ','v2',@file_name, @list_id = @listid output;
Run Code Online (Sandbox Code Playgroud)
我重新创建了链接服务器并启用了RPC.我已经为存储过程授予了执行权限.我可以在链接服务器上选择记录并执行其他存储过程,但上面的exec失败(它在升级之前有效).SQL Server 2005和SQL Server 2014之间是否存在导致此失败的语法差异?
我想出了这个问题.链接的服务器已正确创建.但是,在服务器升级并切换后,服务器名称sys.servers仍然具有旧的服务器名称.
我不得不删除旧服务器名称并在新服务器sys.servers上添加新服务器名称
sp_dropserver 'Server_A'
GO
sp_addserver 'Server',local
GO
Run Code Online (Sandbox Code Playgroud)
首先,通过此查询检查您的链接服务器是否在列表中
select name from sys.servers
Run Code Online (Sandbox Code Playgroud)
如果不存在,请尝试添加到链接服务器
EXEC sp_addlinkedserver @server = 'SERVER_NAME' --or may be server ip address
Run Code Online (Sandbox Code Playgroud)
之后,通过以下方式登录到该链接服务器
EXEC sp_addlinkedsrvlogin 'SERVER_NAME'
,'false'
,NULL
,'USER_NAME'
,'PASSWORD'
Run Code Online (Sandbox Code Playgroud)
然后,您可以做任何您想做的事情,像本地服务器一样对待它
exec [SERVER_NAME].[DATABASE_NAME].dbo.SP_NAME @sample_parameter
Run Code Online (Sandbox Code Playgroud)
最后,您可以通过以下方式从链接的服务器列表中删除该服务器:
sp_dropserver 'SERVER_NAME', 'droplogins'
Run Code Online (Sandbox Code Playgroud)
如果会帮您,请投票。