Итак, я пытаюсь создать хранимую процедуру, которая будет обновлять предыдущие записи до соответствующего значения MAX.Выполнять различные обновления:
Теперь я получил запрос, но я хочу, чтобы это обновление выполнялось четыре раза, потому что предложение where будет основываться на подстроке поля. Вот что меня смущает.
Подстрока будет проверять следующие значения - «01», «04», «012-», «042-».
Есть ли способ, которым я могу это сделать, не переписывая обновление 4 раза?
Вот мой код-
SET XACT_ABORT ON
BEGIN TRAN
UPDATE Staging..lease
SET ls_origleaseamt = l.maxOrigLease
FROM
(
select MAX(ls_origleaseamt) AS [maxOrigLease]
from Staging..lease
where SUBSTRING(ls_leasenbr, 1, 2) = '04'
) l
WHERE SUBSTRING(ls_leasenbr,1,2) = '04'
UPDATE Staging..lease
SET ls_origleaseamt = l.maxOrigLease
FROM
(
select MAX(ls_origleaseamt) AS [maxOrigLease]
from Staging..lease
where SUBSTRING(ls_leasenbr, 1, 4) = '012-'
) l
WHERE SUBSTRING(ls_leasenbr,1,4) = '012-'
UPDATE Staging..lease
SET ls_origleaseamt = l.maxOrigLease
FROM
(
select MAX(ls_origleaseamt) AS [maxOrigLease]
from Staging..lease
where SUBSTRING(ls_leasenbr, 1, 4) = '042-'
) l
WHERE SUBSTRING(ls_leasenbr,1,4) = '042-'
COMMIT TRAN
Я думал, может быть петля может сделать трюк? Но это изменение длины подстроки, которое меня сбивает с толку.
Какую версию SQL Server вы используете? – AHiggins
@AHiggins Я использую SQL Server 2012 –
Вы уверены, что ваши утверждения обновления верны? Обновление '04' также обновит записи' 042-'. Записи '04' и' 042-'будут иметь тот же макс. То есть, это будет максимальное количество записей '04' и' 042-'. То же самое произойдет и для записей «01» и «012-», но ваш код не показывает шаг обновления «01». – Rabbit