Добрый день.
Имеется такая функция:
FUNCTION GetPD
(
@ReportDate datetime,
@ItemId int
)
RETURNS int
AS
-- сложная логика пропущена, интересует этот запрос
SELECT TOP 1
@Rating = rih.Rating
FROM PDIndicatorsHistory AS rih
WHERE
rih.ItemId= @itemId
AND rih.ReportDate < @ReportDate
ORDER BY rih.ReportDate DESC
RETURN @Rating
END
Снаружи она вызывается так:
; WITH
Data AS (
SELECT TOP 100 PERCENT
*
FROM PDIndicatorsHistory
ORDER BY ReportDate ASC
)
UPDATE Data
SET
PDRating = @PDRating,
@PDRating = GetPD (ReportDate, ItemId)
WHERE
ItemId= @ItemId
AND ReportDate >= @DateFrom
GetPD предполагает, что при расчете на дату, в PDIndicatorsHistory есть расчет на предыдущую дату. Но обычный UPDATE при обновлении нескольких строк не дает определенного порядка выполнения. Пробовался вариант с CTE и TOP 100 PERCENT, но он дал результата.
Можно ли вообще так сделать, чтобы результат обновления одной строки в UPDATE был виден при обновлении следующей?