SQL Server-EXEC()在DB_LINK发行

时间:2019-06-25 19:20:09

标签: sql-server remote-server

对链接服务器的以下查询产生预期的结果:

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.

According to Microsoft

  

如果在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的远程服务器要慢。

0 个答案:

没有答案