不是最复杂的问题,但我已经暂时关注这个问题了,而且我在一个街区。这是我想要变成更新语句的TSQL select语句。包含表结构以供参考(服务器,数据库和表名称简化为实际内容)。
SELECT m.ConfirmationCode as CodeInMain,
e.ConfirmationCode as CodeInEvents
FROM Server1.DB1.dbo.MainTable AS m
INNER JOIN Server2.DB1.dbo.Events AS e ON c.AccountCode = e.AccountCode
AND c.Commodity = (
SELECT Alias
FROM Server2.DB1.dbo.Commodities
WHERE pkCommodityId = e.fkCommodityId )
WHERE m.AccountCode = e.AccountCode
AND m.Brand IN( 'FTR', 'CER' );
以下是引用的表模式:
Server1.DB1.dbo.MainTable (ConfirmationCode varchar(100), AccountCode varchar(100), Commodity varchar(1), Brand varchar(3))
Server2.DB1.dbo.Events (ConfirmationCode varchar(100), AccountCode varchar(100), Commodity int)
Server2.DB1.dbo.Commodities (pkCommodityId int, Alias varchar(100))
服务器2链接到服务器1。
select语句的当前输出是:
CodeInMain | CodeInEvents
--------------------------
AN235cAc0a | NULL
CSORSX239c | NULL
...
我输出的所有信息都符合预期。
我的目标是使用e.ConfirmationCode as CodeInEvents
中的数据更新m.ConfirmationCode as CodeInMain
,但我对如何适应加入感到困惑。我意识到当存储在临时表中时,游标可用于循环上述输出的内容,但我真的希望能够在单个更新语句中执行此操作。
答案 0 :(得分:0)
Update e
set e.ConfirmationCode = m.ConfirmationCode
from Server2.DB1.dbo.Events e
inner join Server1.DB1.dbo.MainTable m on m.AccountCode = e.AccountCode and m.Commodity = (select Alias from Server2.DB1.dbo.Commodities where pkCommodityId = e.fkCommodityId)
where m.AccountCode = e.AccountCode and m.Brand in ('FTR', 'CER')