我有一个用户定义的 CLR 聚合函数,它可能会引发错误。如果我的查询中出现错误,我想知道如何处理错误。
该函数正在执行类似于 Excel 所做的 IRR 计算,即。迭代寻根计算。如果没有找到根,则会引发错误。这是我需要处理的错误。
该查询是一个更大的存储过程的一部分,它看起来像:
select
MyID,
Excel_XIRR(col1)
from @t
group by MyID
我得到的错误是这样的:
A .NET Framework error occurred during execution of user-defined routine or aggregate "Excel_Xirr":
System.ArgumentException: Not found an interval comprising the root after 60 tries, last tried was (-172638549748481000000000.000000, 280537643341281000000000.000000)
System.ArgumentException:
at System.Numeric.Common.rfindBounds@59(FastFunc`2 f, Double minBound, Double maxBound, Double precision, Double low, Double up, Int32 tries)
at System.Numeric.Common.findBounds(FastFunc`2 f, Double guess, Double minBound, Double maxBound, Double precision)
at System.Numeric.Common.findRoot(FastFunc`2 f, Double guess)
at Excel_Xirr.Terminate()
我的问题是并非所有行都会导致此错误。查询中有一些合法的结果,我想稍后在我的存储过程中捕获和使用。此错误会阻止我获取查询结果吗?如果是这样,有没有办法找出哪些行(动态)抛出错误,然后重新运行其余行的查询?