Если я понимаю, что вы пытаетесь выполнить, т. Е. Обновить Tmin
в InspectionHistoryUTG
на основании самого последнего значения UserTmin
в InspectionHistoryUTGTML
, тогда вы будете действовать процедурным образом, как если бы вы былинаписание обычного кода.Однако при написании SQL нужно использовать кодирование, основанное на множестве, потому что именно так SQL Server работает и работает.
Таким образом, то, чего вы пытаетесь достичь, может быть достигнуто с помощью одного оператора обновления SQL следующим образом:
declare @InspectionHistoryUTG table (InspectionUTGID int, TMin int);
declare @InspectionHistoryUTGTML table (InspectionUTGID int, UserTmin int, RLTMin int);
insert into @InspectionHistoryUTG (InspectionUTGID)
select 1
union all select 2
union all select 3;
insert into @InspectionHistoryUTGTML (InspectionUTGID, RLTMin, UserTmin)
select 1, 1, 1
union all select 1, 2, 2
union all select 1, 3, 3
union all select 2, 1, 3
union all select 2, 2, 2
union all select 2, 3, 1
union all select 3, 1, 2
union all select 3, 2, 3
union all select 3, 3, 1;
--select * from @InspectionHistoryUTG;
--select * from @InspectionHistoryUTGTML;
update IH set
TMin = (
select top 1 IHT.UserTmin
from @InspectionHistoryUTGTML IHT
where IHT.InspectionUTGID = IH.InspectionUTGID and IHT.RLTMin is not null
order by IHT.RLTMin
)
from @InspectionHistoryUTG IH
-- Following where clause won't update if a single null TML record exists as per OPs comment
where not exists (
select 1
from @InspectionHistoryUTGTML IHT
where IHT.InspectionUTGID = IH.InspectionUTGID and IHT.RLTMin is null
)
select * from @InspectionHistoryUTG;
--select * from @InspectionHistoryUTGTML;
Мы просто используем регулярный оператор обновления для InspectionHistoryUTG
с подзапросом для InspectionHistoryUTGTML
, чтобы получить требуемое значение для TMin
для текущего значения InspectionUTGID
.
Поэтому вместо того, чтобы обновлять InspectionHistoryUTG
по одной строке за раз, используя несколько операций выбора и обновления, мы выполняем всю работу за один клик.
Примечание. Это также означает, что вы должны представлять свои вопросы в будущем, поскольку это означает, чтолюди, желающие помочь, могут просто скопировать и вставить SQL в свой анализатор запросов и начать работать с ним, используя действительные образцы данных.