将列值从一个表复制到另一个表

sho*_*ked 2 t-sql sql-server copy

我现在正在尝试创建一个 T-SQL 查询几个小时。谷歌和论坛搜索没有帮助,所以我希望有人能帮助我。

有两个表,ChangeJournal。中的每一行Change都有 5 个相关的行Journal

我想要做的是列值(复制CreatedDateTime特定的相关行)从Journal入列AuthorizationDateChange。这应该对Change.

这是我迄今为止取得的成就:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = 
    ( SELECT Journal.CreatedDateTime 
      FROM Journal 
        JOIN Change 
          ON Journal.Parentlink_RecID = Change.RecID 
      WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' 
        AND Change.RecID = Journal.ParentLink_RecID
    )
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误消息:

消息 512,级别 16,状态 1,第 1 行子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。该语句已终止。

我以为我确实通过 WHERE 子句 ( ChangeNotes_Subject = '...')将结果限制为一个。我做错了什么?

ype*_*eᵀᴹ 5

我认为这会奏效:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = 
    ( SELECT Journal.CreatedDateTime 
      FROM Journal 
      WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' 
        AND Change.RecID = Journal.ParentLink_RecID
    ) ;
Run Code Online (Sandbox Code Playgroud)

但使用JOIN更好 - 避免任何不需要的更新。就是这样:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = Journal.CreatedDateTime 
FROM Journal 
  JOIN Change 
    ON Change.RecID = Journal.ParentLink_RecID
WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' ;
Run Code Online (Sandbox Code Playgroud)