我有一個用戶定義的CLR聚合函數,可能會引發錯誤。我想知道如何處理一個錯誤,如果我的查詢發生。SQL CLR聚合函數錯誤處理
該函數執行的IRR計算與Excel所做的相似,即,一個迭代的根發現計算。如果找不到root,則會引發錯誤。這是我需要處理的錯誤。
查詢是一個更大的存儲過程的一部分,它看起來像:
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 [email protected](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()
我的問題是,並非所有的行導致此錯誤。查詢中有一些合法的結果,我希望在我的存儲過程中捕獲並稍後使用。這個錯誤會阻止我獲取查詢的結果嗎?如果是這樣,是否有辦法找出哪些行將引發錯誤(動態),然後重新運行查詢以查找其餘行?
因爲它看起來像是一個明智的解決方案,因此給予您信任。儘管SQL Server不能識別NaN,所以函數將不得不返回null。我的希望是在不改變功能的情況下處理錯誤,但是我懷疑這是在做什麼。 – FistOfFury