Chcę napisać funkcję zdefiniowaną przez użytkownika innego niż CLR w SQL Server 2005. Ta funkcja pobiera ciąg wejściowy i zwraca ciąg wyjściowy. Jeśli ciąg wejściowy jest nieprawidłowy, chcę wskazać błąd dla osoby dzwoniącej.Obsługa błędów w funkcjach zdefiniowanych przez użytkownika
Moją pierwszą myślą było użycie RAISERROR do podniesienia wyjątku. Jednak SQL Server nie pozwala na to wewnątrz UDF (choć można podnieść wyjątki w UDF opartych na CLR, idź rysunek).
Ostatnią możliwością jest zwrócenie wartości NULL (lub innej wartości wskaźnika błędu) z funkcji, jeśli wartość wejściowa jest błędna. Jednak nie lubię tej opcji, ponieważ:
- nie dostarcza żadnej użytecznej informacji rozmówcy
- nie pozwala mi zwrócić NULL w odpowiedzi na ważny wkład (ponieważ jest on używany jako kod błędu).
Czy istnieje sposób przyjazny dla wywoływania funkcji zatrzymania funkcji na błąd w SQL Server?
Spodziewałem się tyle, ale myślałem, że zapytam. Dzięki. –
Problem z programami szpiegującymi polega na tym, że nie można ich wywoływać w sposób, w jaki można, za pomocą funkcji. –
Zgadzam się z @MikeK. Cały powód używania UDF, a nie pełnej procedury stored_procedure, jest przeznaczony do użytku inline. Czy odpowiedź na to pytanie została zmieniona w nowszych wersjach SQL Server? (np. 2016) – ColinMac