对链接服务器的以下查询产生预期的结果:
SELECT * FROM DB_LINK.[DB].[dbo].[TABLE1]
我希望以下内容返回相同的结果:
EXEC('SELECT * FROM [DB].[dbo].[TABLE1]') AT DB_LINK
但是它产生错误18482:
Could not connect to server 'B' because 'A' is not defined as a remote server.
Verify that you have specified the correct server name.
如果在sysservers中找不到srvid = 0的条目,或者如果srvid = 0的服务器名称属于与本地Windows NT计算机名称不同的服务器名称,则将收到错误。
但是,我的情况都没有问题,问题仍然存在。
实际上,我可以在其他数据库链接上执行此EXEC
命令,但该命令没有问题,例如以下对其他链接适用:
EXEC('SELECT * FROM [DB].[dbo].[TABLE1]') AT DB_LINK2
我也读过this article,但是它又说此错误是由于在安装SQL Server之后重命名服务器引起的,但是对于我而言,这不是真的。以下命令验证服务器的名称正确(在本地和远程服务器上):
select @@SERVERNAME
go
因此,我认为这是远程服务器而非本地服务器的问题,因为我可以在其他数据库链接上使用此EXEC
命令。
有人知道还有什么可能导致此问题吗?
P.S。使用EXEC
命令的原因是因为我要执行两个远程表的JOIN
。我发现使用JOIN
方法执行DB_LINK.[DB].[dbo].[TABLE1]
比通过JOIN
执行EXEC
的远程服务器要慢。