alter function udf_GetSumWithCoefficient(@input int)
returns int
as
BEGIN
DECLARE @DCName numeric(8,2)
DECLARE @DCCoefficient numeric(8,2)
DECLARE @DCStep numeric(8,2)
DECLARE @Sum numeric(8,2)
SET @Sum = 0.0
DECLARE db_cursor CURSOR FOR
SELECT [next].DCName, ISNULL([next].DCName, 0) - [current].DCName,[next].DCCoefficient
FROM DriveCoefficient AS [current]
inner JOIN DriveCoefficient AS [next] ON [next].DCName = (SELECT MIN(DCName) FROM DriveCoefficient WHERE DCName > [current].DCName)
union
SELECT DCName, DCName, DCCoefficient
FROM DriveCoefficient
where DCName = (select min(DCName) from DriveCoefficient)
order by 1
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DCName, @DCStep, @DCCoefficient
WHILE @@FETCH_STATUS = 0
BEGIN
if @DCStep <= @input --步小于输入值
begin
set @Sum = @Sum + @DCStep * @DCCoefficient
set @input = @input - @DCStep
end
else
begin
set @Sum = @Sum + @input * @DCCoefficient
set @input = 0
end
FETCH NEXT FROM db_cursor INTO @DCName, @DCStep, @DCCoefficient
END
if @input > 0
set @Sum = @Sum + @input * @DCCoefficient
CLOSE db_cursor
DEALLOCATE db_cursor
return @Sum
END
![](https://img-my.csdn.net/uploads/201208/16/1345099072_6186.jpg)