UFN_MEMBERSHIP_GETCONTRIBUTEDAMOUNTSBYLEVELID
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@MEMBERSHIPLEVELID | uniqueidentifier | IN | |
@TOTALAMOUNT | money | IN | |
@DECIMALDIGITS | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_MEMBERSHIP_GETCONTRIBUTEDAMOUNTSBYLEVELID
(
@MEMBERSHIPLEVELID uniqueidentifier,
@TOTALAMOUNT money,
@DECIMALDIGITS tinyint
)
returns @RETVAL table
(
DESIGNATIONID uniqueidentifier,
AMOUNT money
)
with execute as caller
as begin
declare @DESIGNATIONID uniqueidentifier;
declare @PERCENT decimal(20,4);
declare @NUMDESIGNATIONS integer;
declare @COUNTER tinyint = 1;
declare @AMOUNTLEFT money = @TOTALAMOUNT;
declare @CURRENTAMOUNT money;
select @NUMDESIGNATIONS = coalesce(count(ID), 0)
from dbo.MEMBERSHIPLEVELDESIGNATION
where MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID
declare DESIGNATIONCURSOR cursor local fast_forward
for select DESIGNATIONID, [PERCENT] from dbo.MEMBERSHIPLEVELDESIGNATION
where MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID
open DESIGNATIONCURSOR
fetch next from DESIGNATIONCURSOR into @DESIGNATIONID, @PERCENT
while @@FETCH_STATUS = 0
begin
if @COUNTER < @NUMDESIGNATIONS
begin
set @CURRENTAMOUNT = round(@TOTALAMOUNT * 0.01 * @PERCENT,@DECIMALDIGITS)
set @AMOUNTLEFT -= @CURRENTAMOUNT
end
else
begin
set @CURRENTAMOUNT = @AMOUNTLEFT
end
insert into @RETVAL (DESIGNATIONID, AMOUNT)
values (@DESIGNATIONID, @CURRENTAMOUNT)
set @COUNTER += 1
fetch next from DESIGNATIONCURSOR into @DESIGNATIONID, @PERCENT
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close DESIGNATIONCURSOR;
deallocate DESIGNATIONCURSOR;
return
end