У меня есть форма, которая отображает список систем вместе с их текущим статусом. Пользователь может изменить статус, а дата изменения статуса хранится в таблице истории. Пользователь может также изменить имя сервера как изменения статуса (например, если система заменена из-за листа аренды).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
)
Ошибка я получаю:
Subquery вернулся более чем на 1 значение. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.
@ michael-fredrickson благодарит за изменения. – HPWD
Просто лишний лакомый кусочек в случае, если это не было очевидно, но таблица истории могла иметь 1-100 записей, поэтому каждая запись должна быть обновлена, если имя системы изменится (где systemname! = OriginalSystemname). – HPWD
Чтобы получить точные решения, не могли бы вы предоставить несколько строк выборочных данных до и после обновления (также включить хотя бы одну строку, которую вы делаете * не * хотите обновить). Решать проблемы с текстом - это весело, но это приводит к большому количеству потраченных усилий. –