Podobnie jak to miało miejsce z procedurami składowanymi, SQL Server umożliwia nam definiowanie funkcji użytkownika. Dzięki temu mamy możliwość zapisania definicji pewnych powtarzalnych operacji. Funkcje mogą być dwojakiego rodzaju: zwracające pojedynczą wartość ("Scalar-valued Functions" oraz tablice ("Table-valued Functions"). Tworzenie funkcji użytkownika odbywa się poprzez wydanie odpowiednio napisanych komend w języku T-SQL, lub za pomocą graficznego pomocnika (na tej opcji się teraz skupimy):
Uruchamiamy skrypt generujący funkcję typu "Scalar"". Oto, co widzimy w oknie edytora SQL:
W kolejnych sekcjach mamy podane właściwości SQL (przed CREATE), definicję parametrów (w nawiasie, w formie takiej jak w przypadku procedur składowanych), informację o typie wyniku zwracanego w rezultacie wykonania funkcji (RETURNS), definicję zmiennej zwracanej przez funkcję (DECLARE), polecenia wykonywane i przypisywane do zmiennej wynikowej (SELECT) oraz sam wynik wyrażony przez funkcję (RETURN na końcu). Aby przećwiczyć budowanie funkcji, stwórzmy jedną, która będzie zawsze zwracała 3 znaki z tekstu (argument funkcji), począwszy od drugiego:
Funkcja nazwana jest "frag_text" i posiada jeden parametr wejściowy "@Param1" i jedną zmienną wyjściową "@frag". Zarówno parametr jak i wynik są w formacie "varchar(50)". W przypadku konieczności zmiany definicji funkcji, całość wygląda podobnie, jednak zamiast CREATE musimy użyć słowa ALTER.
Utwórzmy teraz funkcję drugiego typu - zwracającą tabelę. Pominiemy kreatora lecz spojrzymy od razu na kształt końcowy:
Różnice nie są duże: przede wszystkim w sekcji RETURNS użyto sformułowania TABLE zamiast typu danej wynikowej. Dodatkowo poza definicją zmiennej wynikowej, podajemy po prostu polecenie lub wiele poleceń SQL generujące określoną tabelę wynikową (możemy wykorzystać w poleceniach też parametry zdefiniowane na początku funkcji). Nasza funkcja jest prosta i zwraca fragment tabeli "sprzedaż" wg podanego parametru nakładanego na pole "klient".
W zdefiniowaniu naszych prostych funkcji, sprawdźmy jak z nich korzystać w poleceniach SQL:
Po lewej stronie powyższego obrazu widzimy, że funkcje pojawiły się na drzewie obiektów bazy danych. Z prawej strony natomiast przedstawiono przykładowe ich użycie wraz z wynikami (odpowiednie pary czerwonych i zielonych ramek). Jak widać, funkcja zwracająca pojedynczą wartość, może być użyta jako element wyboru SELECT polecenia, drugi typ może być użyty jak zwykła tabela zawierająca parametr.