TSQL:尝试将连接的select语句转换为update语句

时间:2015-09-22 20:13:09

标签: sql-server tsql

不是最复杂的问题,但我已经暂时关注这个问题了,而且我在一个街区。这是我想要变成更新语句的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,但我对如何适应加入感到困惑。我意识到当存储在临时表中时,游标可用于循环上述输出的内容,但我真的希望能够在单个更新语句中执行此操作。

1 个答案:

答案 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')
相关问题