SQL Server 2000:使用另一个表中的值更新一个表

HPW*_*PWD 0 sql sql-server sql-server-2000

我有一个表单,显示系统列表及其当前状态.用户可以更改状态,并将状态更改的日期存储在历史记录表中.用户还可以在状态更改时更改服务器的名称(例如,如果由于租赁滚动而更换系统).

历史表存储详细信息,systemname如果系统名称在表单上发生更改,则还需要更新历史记录(以及所有历史更改).在表单上,​​有一个隐藏字段,originalsystemName因此我们知道systemname表单保存时是否匹配.

<input type='text' name='systemname'>
  <input type='text' name='originalSystemName'>
  <input type='text' name='status'><input type='submit' type='submit'>
Run Code Online (Sandbox Code Playgroud)

我想出了以下查询但是我收到了一个错误(请参阅下面的查询).

update SysHistory set  
SystemName = (
    select distinct t.systemname 
    from systemInfo_tmp t, SysHistory h 
    where t.systemname != t.originalSystemName
)    
where systemname in (
    select distinct t1.originalSystemName 
    from systemInfo_tmp t1, SysHistory h1 
    where t1.systemname != t1.originalSystemName
)
Run Code Online (Sandbox Code Playgroud)

我收到的错误:

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.

Aar*_*and 5

这可能是你的意思吗?虽然这是一个单行表,但似乎WHERE缺少一个条款.

UPDATE h
    SET SystemName = t.systemname
    FROM SysHistory AS h
    INNER JOIN systemInfo_tmp AS t
    ON h.systemname <> t.originalSystemName;
Run Code Online (Sandbox Code Playgroud)