/* расчет рейтинга клиента по объему продаж */
ALTER proc [dbo].[Update_Ratings]
@TaskID int = null,
@SubcatID int = null,
@ExtParamID int = null,
@Mode varchar(max) = null,
@UserID int,
@ErrorMessage varchar(1000) = null out
As
/* проверки */
if @TaskID is not null begin
set @ErrorMessage = 'Данное действие не может принимать в качестве параметра номер задачи. Оно предназначено только для массовой обработки'
return
end
if @SubcatID is null begin
set @ErrorMessage = 'Укажите номер категории'
return
end
/* формирование промежуточной таблицы с расчетами */
declare @TargetObjects table (TaskID int, SaleAmount money, Rating varchar(max))
insert into @TargetObjects (TaskID, SaleAmount, Rating)
select Tasks.TaskID, Sales.SaleAmount, 'NOT_VIP' as Rating
from Tasks (nolock)
join Sales (nolock) on Sales.TaskID = Tasks.TaskID
where Tasks.SubcatID = @SubcatID and Tasks.IsClosed = 1
update @TargetObjects
set Rating = 'VIP'
where SaleAmount > 1000000
/* возвращаемый набор данных */
select t.TaskID, @ExtParamID ExtParamID, t.Rating Value, @UserID UserID
from @TargetObjects t
|