У меня есть определенная пользователем функция агрегации CLR, которая может потенциально вызвать ошибку. Я хотел бы знать, как обрабатывать ошибку, если она встречается в моем запросе.Функция агрегирования SQL CLR Обработка ошибок
Функция выполняет расчет IRR, аналогичный тому, который делает Excel, т.е. итеративный расчет корневого поиска. Если корень не найден, возникает ошибка. Это ошибка, которую мне нужно обработать.
Запрос является частью большего размера хранимой процедуры, и это выглядит примерно так:
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