在 SQL Server 中尝试将远程过程调用(RPC)从一台服务器连接到另一台服务器时收到 "错误 18482" 错误消息


症状


尝试从一台服务器到另一台服务器的远程过程调用(RPC)时(例如,通过在远程计算机上使用 EXEC (如 EXEC SERV_REMOTE pubs)执行存储过程。byroyalty),您可能会收到以下错误消息:
错误18482:无法连接到网站 "0",因为 "" 未在网站上定义为远程服务器。
注意 如果您使用的是 Microsoft SQL Server 2005,可能会收到以下错误消息:
错误18482:无法连接到服务器 <ServerName>,因为 <ServerName> 未定义为远程服务器。 验证您是否指定了正确的服务器名称。

原因


当 SQL Server 无法执行远程过程调用时,将发生此错误。 这可能是由于本地服务器配置不正确所致。 若要进行远程过程调用,SQL Server 首先通过在 sysservers中查找具有 srvid = 0 的服务器名称来确定本地服务器的身份。 如果在 sysservers中找不到带有 srvid = 0 的条目,或者如果使用 srvid = 0 的服务器名称属于不同于本地 Windows NT 计算机名的服务器名称,你将收到错误。

解决方法


若要确定本地服务器是否配置正确,请检查 master 中的 srvstatus 列。 sysservers。 对于本地服务器,此值应为0。例如,假设本地服务器名为 "SERV_LOCAL",远程服务器名为 "SERV_REMOTE", sysservers 包含以下信息:
   srvid srvstatus      srvname            srvnetname   ----- ---------      ---------------    ------------    ...   1     1              SERV_LOCAL         SERV_LOCAL   2     1              SERV_REMOTE        SERV_REMOTE 
在上述输出中,SERV_LOCAL 是本地服务器,但它的 srvid 为 1;它应该为0。 若要更正此错误,请按照下列步骤操作:
  1. 运行 sp_dropserver local_server_namedroplogins (在本例中,你将运行 sp_dropserver SERV_LOCAL,droplogins)。
  2. 运行 sp_addserver local_server_name本地 (在此示例中,你将运行 sp_addserver SERV_LOCAL 本地)。
  3. 停止并重新启动 SQL Server。
运行这些步骤后, sysservers 表应如下所示:
   srvid srvstatus      srvname            srvnetname   ----- ---------      ---------------    ------------    ...   0     0              SERV_LOCAL         SERV_LOCAL   2     1              SERV_REMOTE        SERV_REMOTE 
请注意,对于本地服务器,服务器 ID (srvid)应该为0。

更多信息


安装复制时可能会收到此错误消息,因为安装过程会在复制所涉及的服务器之间进行远程过程调用。