使用INNER JOIN查询DELETE(在链接服务器上)

时间:2018-03-27 15:22:50

标签: sql sql-server sql-server-2005 sql-server-2012 linked-server

根据this回答,我尝试从DELETE发出JOIN。如果两个表位于同一服务器上,则查询有效,但现在我有两个服务器:

  • TableA位于DatabaseA上的ServerA SQL Server 9.0.4060
  • TableB位于DatabaseB上的ServerB SQL Server 12.0.2000

ServerAServerB上的链接服务器。

我有以下 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。

补充考虑:

  • 在ServerB.DatabaseB上执行的查询select * from sys.servers where is_linked = 1向我显示ServerA是链接服务器;
  • 如果将DELETE A替换为SELECT A.*,则查询会显示我要删除的正确结果;
  • 我检查了INFORMATION_SCHEMA.COLUMNS,并且每个连接列都有SQL_Latin1_General_CP1_CI_AS归类;
  • 从[ServerB]我可以删除[ServerA]的行。[DatabaseA]。[TableA]如果我使用的DELETE没有JOIN

有人对我有任何帮助吗?

0 个答案:

没有答案