SQL Server jest dostarczany z kolekcją wbudowanych funkcji, które umożliwiają wykonywanie różnych operacji. Każda wbudowana funkcja służy określonemu celowi i nie można jej modyfikować. Jeśli funkcja spełnia Twoje zadanie, możesz śmiało z niej korzystać.
Ale co, jeśli nie możesz znaleźć funkcji, która służy Twojemu celowi?
Następnie nadszedł czas na napisanie własnej funkcji zdefiniowanej przez użytkownika.
Co to jest funkcja zdefiniowana przez użytkownika?
funkcja zdefiniowana przez użytkownika (UDF) to procedura, która może pobierać parametry, wykonywać obliczenia lub inne działania i zwracać wynik. A jak sama nazwa wskazuje, jest on definiowany i tworzony przez użytkownika. W tym przypadku „użytkownik” to programista SQL, administrator baz danych lub osoba, która napisała funkcję.
Termin funkcja zdefiniowana przez użytkownika odróżnia ją od wbudowanych funkcji dostarczanych z SQL Server.
Możesz określić, czy UDF będzie akceptował jakiekolwiek parametry, a jeśli tak, ich nazwy, typy danych itp. Możesz na przykład napisać UDF, który akceptuje identyfikator produktu jako argument. Funkcja może następnie wykorzystać to w swoich obliczeniach. Oznacza to, że dane wyjściowe funkcji będą zależeć od danych wejściowych, które są do niej dostarczane, gdy jest wywoływana.
Po utworzeniu UDF można go następnie wywołać.
Wywoływanie funkcji zdefiniowanej przez użytkownika
Kod wewnątrz funkcji nie jest wykonywany podczas tworzenia funkcji. Jest wykonywany tylko wtedy, gdy funkcja jest wywoływana .
„Wywołanie” funkcji jest czasami określane jako „wywołanie” funkcji. To wtedy otrzymujesz funkcję, która robi to, do czego została stworzona. Zasadniczo tworzysz funkcję, a następnie czeka ona na wywołanie.
Możesz wywołać UDF z kodu T-SQL, tak jakbyś wywoływał funkcję systemową. Na przykład możesz użyć UDF w WHERE
klauzula w celu zawężenia wyników SELECT
oświadczenie. Możesz również użyć go na liście kolumn do zwrócenia.
UDF mogą być również używane w kolumnach obliczanych. Może to być przydatne, jeśli kiedykolwiek będziesz potrzebować kolumny obliczeniowej, aby uzyskać dostęp do danych w innej kolumnie.
Parametry
Funkcja zdefiniowana przez użytkownika może przyjąć do 1024 parametrów wejściowych. Jednak w razie potrzeby możesz również zdefiniować funkcję bez żadnych parametrów.
Przykładem wbudowanej funkcji bez parametrów jest GETDATE()
. Ta funkcja po prostu zwraca bieżący znacznik czasu systemu bazy danych. Nie trzeba przekazywać żadnych parametrów, aby to uzyskać.
Przykładem funkcji zdefiniowanej przez użytkownika z pojedynczym parametrem może być funkcja zwracająca dane kontaktowe klienta na podstawie identyfikatora klienta. Kiedy wywołujesz funkcję, przekazujesz identyfikator klienta do funkcji jako parametr. Funkcja może następnie wyszukać dane klienta i zwrócić je w zmiennej return. Jeśli podasz identyfikator innego klienta, funkcja zwróci dane tego klienta.
Zalety funkcji zdefiniowanych przez użytkownika
Oto niektóre z głównych zalet UDF.
- Programowanie modułowe
- UDF pozwalają na napisanie kodu raz, a następnie wywoływanie go tyle razy, ile potrzeba. Nie musisz pisać tego samego kodu za każdym razem, gdy musisz zrobić to samo. Zamiast tego po prostu wywołaj funkcję. Jest to również korzystne, jeśli coś się zmieni. Wystarczy go zaktualizować w jednym miejscu – funkcji. Jeśli nie korzystałeś z tej funkcji, musisz zaktualizować ją w wielu miejscach w swojej aplikacji.
- Wydajność
- UDF zmniejszają koszt kompilacji kodu T-SQL, buforując plany i ponownie wykorzystując je do powtórnych wykonań. UDF nie musi być ponownie analizowany i ponownie optymalizowany przy każdym użyciu. Powoduje to znacznie szybsze czasy wykonania.
- Zmniejszony ruch sieciowy
- Operacja, która filtruje dane na podstawie złożonego ograniczenia, którego nie można wyrazić w pojedynczym wyrażeniu skalarnym, może zostać wyrażona jako funkcja. Funkcję można następnie wywołać w
WHERE
klauzula zmniejszająca liczbę wierszy wysyłanych do klienta.
UDF mogą mieć również inne, bardziej konkretne korzyści, jak w poprzednim przykładzie, o którym wspomniałem z obliczoną kolumną uzyskującą dostęp do danych w innej tabeli.
Rodzaje funkcji zdefiniowanych przez użytkownika
Istnieją dwa typy funkcji T-SQL zdefiniowanych przez użytkownika:
- Funkcje skalarne
- Funkcje skalarne zdefiniowane przez użytkownika zwracają pojedynczą wartość danych. Typ wartości definiujesz w funkcji. Zwracany typ może być dowolnym typem danych z wyjątkiem tekstu , ntekst , obraz , kursor i sygnatura czasowa .
- Funkcje o wartościach tabelarycznych
- Funkcje o wartościach tabelarycznych (TVF) zwracają tabelę. Ich typ zwrotu to zatem tabela . Istnieją dwa rodzaje TVF:inline TVF i wielowyrazowy TVF. Wbudowany TVF nie ma treści funkcji. Jego tabela zwrotów jest wynikiem pojedynczego
SELECT
oświadczenie. Z drugiej strony, wielowyrazowy TVF ma ciało funkcyjne. W przypadku wielu instrukcji TVF określasz strukturę tabeli w zmiennej zwracanej.
Można również tworzyć funkcje skalarne i wyceniane w tabeli jako funkcje zdefiniowane przez użytkownika środowiska uruchomieniowego języka wspólnego (CLR).
Począwszy od SQL Server 2005 (9.x), możesz pisać funkcje zdefiniowane przez użytkownika w dowolnym języku programowania Microsoft .NET Framework, takim jak Microsoft Visual Basic .NET lub Microsoft Visual C#.