Skip to main content
 首页 » 编程设计

sql-server之TSQL代数-求解x((a)x b)

2025年05月04日30dudu

我有大约940行的表格。我正在创建一个专门的计算,需要解决以下问题:

对于每一行,我可以乘A多少次而不会超过B。

我创建了一个UDF来做到这一点,如下所示:

DECLARE @x int; 
DECLARE @Result decimal(18,4); 
DECLARE @CutOff int; 
 
SELECT @x=0, @CutOff=1000, @Result=null; 
 
WHILE (((@Result < @tVal) or (@Result IS NULL)) AND @x < @CutOff) BEGIN  
    SET @x = @x + 1; 
    SET @Result = @hProb * @x; 
END 
 
IF (@x = @CutOff) 
    SET @x = -1; 
 
RETURN @x; 



@tVal是我们希望实现的目标值。
@CutOff是要乘以的最大数字,如果x达到该数字并且仍未超过目标值,则停止循环并返回负数


这可以工作,但是我的SP通常需要大约20秒才能运行,而当我添加此功能时,它会增加大约6.5分钟的处理时间。

如果可能的话,我希望有一个更有效的方法来执行此操作,但到目前为止我找不到更好的解决方案。

感谢所有帮助。

请您参考如下方法:

select case 
    when @hProb * @Cutoff <= @tVal then -1 
    else floor(@tVal / @hProb) 
end; 


根据参数的实际数据类型,它可能会有副作用。