根据this回答,我尝试从DELETE
发出JOIN
。如果两个表位于同一服务器上,则查询有效,但现在我有两个服务器:
TableA
位于DatabaseA
上的ServerA
SQL Server 9.0.4060 TableB
位于DatabaseB
上的ServerB
SQL Server 12.0.2000 ServerA
是ServerB
上的链接服务器。
我有以下 TableA (在ServerA
)
+---------+-----------+------+
| Name | Surname | Side |
+---------+-----------+------+
| Anakyn | Skywalker | Bad |
| Luke | Skywaler | Good |
| Obi Wan | Kenobi | Good |
| Anakyn | Skywalker | Good |
| Qui gon | Jinn | Good |
| Darth | Maul | Bad |
+---------+-----------+------+
以及 TableB (在ServerB
上)
+----------+------+
| Surname | Side |
+----------+------+
| Skywaler | Good |
| Maul | Bad |
+----------+------+
如果我执行此查询
DELETE A
FROM [ServerA].[DatabaseA].[dbo].[TableA] A
INNER JOIN [dbo].[TableB] B
ON A.[Surname]=B.[Surname] COLLATE Latin1_General_CI_AS
AND A.[Side]=B.[Side] COLLATE Latin1_General_CI_AS
系统给我一个错误
OLE DB提供程序" SQLNCLI11"对于链接服务器" ServerB"回 消息"多步OLE DB操作生成错误。检查每个 OLE DB状态值(如果可用)。没有工作。"。 Msg 7202,等级 11,状态2,第16行无法找到服务器' ServerB'在sys.servers中。 验证是否指定了正确的服务器名称。如有必要, 执行存储过程sp_addlinkedserver以将服务器添加到 sys.servers。
补充考虑:
select * from sys.servers where is_linked = 1
向我显示ServerA是链接服务器; DELETE A
替换为SELECT A.*
,则查询会显示我要删除的正确结果; SQL_Latin1_General_CP1_CI_AS
归类; DELETE
没有JOIN
。有人对我有任何帮助吗?