我有一個表單,顯示系統列表及其當前狀態。用戶可以更改狀態,並將狀態更改的日期存儲在歷史記錄表中。用戶還可以在狀態發生變化時更改服務器的名稱(例如,如果系統由於租賃卷而被替換)。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'>
我想出了以下查詢,但我得到一個錯誤(查看下面的查詢)。
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
)
錯誤我收到:
子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。
@ michael-fredrickson感謝您的編輯。 – HPWD 2012-02-22 20:59:53
只是一個額外的消息,如果它不明顯,但歷史表可能有1-100個條目,因此如果系統名稱更改(其中systemname!= originalSystemname),每個條目需要更新。 – HPWD 2012-02-22 21:00:54
爲了獲得準確的解決方案,您可以在更新之前和之後提供幾行示例數據(還包括至少一行,您*不*要更新)。解決文字問題很有趣,但是這會導致很多浪費。 – 2012-02-22 21:13:29