Страницы

пятница, 13 сентября 2013 г.

Генерация ошибки из пользовательской функции (UDF) в MS SQL

К сожалению функции в MS SQL так и остаются неполноценными и одна из проблем, это генерация ошибки из функции.

Для демонстрации создадим простейшую функцию складывающую положительные int
Ну в общем все хорошо, но сообщить о том, что нам подали отрицательное значение сложно, а именно при попытки добавить RAISEERROR или THROW мы получим ошибку этапа компиляции. Для RAISEERROR это будет следующее сообщение
Для того, чтобы хоть как-то исправить это положение есть два пути

Метод 1 RETURN CAST
Простейший метод, позволяющий сформировать ошибку в функции
Базируется на том, что CAST VARCHAR->INT сгенерит ошибку. Правда текст ошибки не очень удачен

Метод 2 Процедура + OPENQUERY
Метод чуть более изощренный, но работает (говорим спасибо Yan Roginevich)
Для начала нам нужен loopback связанный сервер
Процедура, формирующая ошибку
И теперь наша функция будет выглядеть следующим образом
При таком исполнении, все выглядит гораздо лучше. Мы даже можем управлять error severity и state
Ну теперь о скорости, если скорость сильна важна, то наш выбор RETURN CAST, если нет и хочется формировать нормальное сообщение о ошибке, то выбираем второй метод.

Комментариев нет :

Отправить комментарий