[英]Update SQL server local table column from linked server table
我在 SSMS 中有本地和链接的服务器表
[Arc].[dbo].[Record]
SQLSERVR.[ArcReport].[dbo].[RecordRemote]
当我查询
select * from [Arc].[dbo].[Record]
select * from SQLSERVR.[ArcReport].[dbo].[RecordRemote]
但是当我查询
UPDATE [Arc].[dbo].[Record]
SET [Arc].[dbo].[Record].Column1= SQLSERVER.[ArcReport].[dbo].[RecordRemote].Column2
WHERE [Arc].[dbo].[Record].id = 16
或者
UPDATE localR
SET localR.Column1= remoteR.Column2
FROM [Arc].[dbo].[Record] AS localR
INNER JOIN SQLSERVER.[ArcReport].[dbo].[RecordRemote].Column2 AS remoteR
ON localR.id= [SQLSERVER].[ArcReport].[dbo].[RecordRemote].id
它说
无法绑定多部分标识符“SQLSERVER.ArcReport.dbo.RecordRemote.Column2”。
您在 SQL 查询中犯了一个错误(参见第 3 张图片)。
您需要执行连接,以便 SQL 服务器知道要从哪一行更新。
UPDATE localR
SET localR.Column1 = remoteR.Column2
FROM Arc.dbo.[Record] AS localR
INNER JOIN LinkedServerName.ArcReport.dbo.RecordRemote AS remoteR
ON <some join condition between localR and remoteR>;
顺便说一句,您的语法在本地也不起作用。 它基本上归结为:
UPDATE dbo.T1
SET C1 = dbo.T2.C2;
这只是无效的语法。 您不会惊讶地添加这样的表引用。
您的连接语法错误:
INNER JOIN SQLSERVER.[ArcReport].[dbo].[RecordRemote].Column2 AS remoteR <= column2 is not a table
进行连接时,您连接 2 个表(不是列),在这 2 个表上有一个连接条件:
这使得:
UPDATE localR
SET localR.Column1= remoteR.Column2
FROM [Arc].[dbo].[Record] AS localR
INNER JOIN SQLSERVER.[ArcReport].[dbo].[RecordRemote] AS remoteR
ON localR.id= remoteR.id
在 SQL 中,当从另一个表更新一个表时不需要服务器内部连接,where 子句可以解决问题。 您的问题的简化解决方案是:
UPDATE Record
SET Record.Column1= remoteR.Column2
FROM SQLSERVER.[ArcReport].[dbo].[RecordRemote] AS remoteR
where Record.id= [SQLSERVER].[ArcReport].[dbo].[RecordRemote].id and Record.id = 16
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.