2012-02-22 9 views
0

システムのリストとその現在のステータスを表示するフォームがあります。ユーザーはステータスを変更することができ、そのステータス変更の日付は履歴テーブルに保存されます。また、ユーザは、ステータスが変更されたときにサーバの名前を変更することもできます(たとえば、リースのためにシステムが置き換えられた場合など)。SQL Server 2000:別のテーブルの値を使用して1つのテーブルを更新する

履歴テーブルには詳細が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 
) 

エラー私が受けている:

サブクエリは複数の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

+0

@ michael-fredrickson編集していただきありがとうございます。 – HPWD

+0

システム名が変更された場合(systemname!= originalSystemname)、各エントリを更新する必要があるように、ヒストリテーブルに1〜100のエントリが含まれている可能性がある場合は、 – HPWD

+0

正確な解決策を得るには、更新前後にいくつかの行のサンプルデータを提供してください(更新したくない行を少なくとも1つは含みます)。言葉の問題を解決するのは楽しいですが、ここでは無駄な努力がたくさんあります。 –

答えて

2

テーブルを別のテーブルの値で更新するには、joinで簡単に実行できます。 systemInfo_tmpが元に一致しないsystemNameを含み、sysHistorysystemName一致したとき、このシナリオで

は、sysHistoryテーブルがsystemInfo_tmpテーブルに結合されています。

update sh 
set systemName = t.systemName 
from 
    sysHistory sh join 
    systemInfo_tmp t on 
     t.originalSystemName = sh.systemName 
     and t.originalSystemName != t.systemName 
+0

ありがとう!私はこれを必要以上に困難にしました。 – HPWD

5

これはあなたが意味することは可能でしょうか?これが1列テーブルでない限り、WHERE節がないようです。

UPDATE h 
    SET SystemName = t.systemname 
    FROM SysHistory AS h 
    INNER JOIN systemInfo_tmp AS t 
    ON h.systemname <> t.originalSystemName; 
+0

私の推測では、 'systemInfo_tmp'は変更された' systemName'に関連付けられているかもしれません。したがって、 't.originalSystemName <> t.systemName'をチェックすることによって、名前が更新されたことがわかります。私の次の推測は、更新された' systemName'を 'sysHistory'に関連付けるために、 'h.systemName = t.originalSystemName' ...もちろん、私はちょうど推測しています。 –

+0

@Michaelはい、これはサンプルデータと望ましい結果が非常に役立つところです。 –

+0

@MichaelFredricksonあなたは正しく推測します。 – HPWD

関連する問題