Я делаю миграцию данных в SQL Server 2008 R2.Я новичок в SQL-Server, но я хорошо знаю Ingres и MySql.
Мне нужно установить «значения по умолчанию» для двух новых полей на «текущие значения» из другой таблицы.Вот моя первая наивная попытка (как я это сделаю в Ingres).
update rk_risk
set n_target_probability_ID = a.n_probability_ID
, n_target_consequence_ID = a.n_consequence_ID
from rk_assess a
WHERE a.n_assess_id = (
SELECT MAX(n_assess_id)
FROM rk_assess a2
WHERE a2.n_risk_id = a.n_risk_id
);
Приведенный выше запрос выполняется без ошибок в дальнейшем, но он устанавливает ALL n_target_probability_ID's & n_target_consequence_ID's для то же значение ... что и значение последней оценки OUTRIGHT (в сопоставлении с «последней оценкой ЭТОГО РИСКА»).
Таблица rk_assess
содержит полную историю записей оценки заrk_risk
s, и моя миссия состоит в том, чтобы «по умолчанию» для нового столбца вероятности и последствий в таблице рисков использовать значения из «текущей» (то есть последней) записи оценки.Столбец rk_assess.n_assess_id
представляет собой автоматически увеличивающийся идентификатор (неизменяемый после установки), поэтому max-id всегда должен быть последней записанной записью.
У меня был небольшой поиск, оба в Googleи так, и попробовал несколько другой вариант запроса, но я все еще застрял.Вот пара других эпических неудач со ссылками.
update rk_risk
set n_target_probability_ID = (select a.n_probability_ID from rk_assess a where a.n_assess_id = (select max(n_assess_id) from rk_assess a2 where a2.n_risk_id = a.n_risk_id) as ca)
, n_target_consequence_ID = (select a.n_consequence_ID from rk_assess a where a.n_assess_id = (select max(n_assess_id) from rk_assess a2 where a2.n_risk_id = a.n_risk_id) as ca)
;
/6586174/obnovlenie-servera-sql-iz-izbrannyh
update r
set r.n_target_probability_ID = ca.n_probability_ID
, r.n_target_consequence_ID = ca.n_consequence_ID
from rk_risk r
join rk_assess a
on a.n_risk_id = r.n_risk_id
select r.n_risk_id
, r.n_target_probability_ID, r.n_target_consequence_ID
, ca.n_probability_ID, ca.n_consequence_ID
from rk_risk r
join rk_assess a
on a.n_risk_id = r.n_risk_id
http://stackoverflow.com/questions/4024489/sql-server-max-statement-returns-multiple-results
UPDATE rk_risk
SET n_target_probability_ID = ca.n_probability_ID
, n_target_consequence_ID = ca.n_consequence_ID
FROM ( rk_assess a
INNER JOIN (
SELECT MAX(a2.n_assess_id)
FROM rk_assess a2
WHERE a2.n_risk_id = a.n_risk_id
) ca -- current assessment
Любые указатели будут с благодарностью.Спасибо всем заранее, даже за то, что прочитали это далеко.
Приветствия.Кит.