W SQL Server wbudowana funkcja z wartościami tabelarycznymi jest jednym z dwóch typów funkcji zwracających tabele Transact-SQL (drugi typ to funkcja z wartościami tabelarycznymi z wieloma instrukcjami).
Funkcje z wartościami przechowywanymi w tabeli (TVF) to typ funkcji zdefiniowanej przez użytkownika, która zwraca wyniki w postaci tabeli. Dlatego można je odpytywać tak jak normalny stół.
Inline TVF (czasami określane jako ITVF) nie mają skojarzonych zmiennych zwracanych. Zwracana wartość jest definiowana za pomocą pojedynczego SELECT
oświadczenie. Ta instrukcja definiuje strukturę tabeli zwrotów. Jest to w przeciwieństwie do wielowyrazowych plików TVF (zwanych również MSTVF), które wymagają zmiennej zwracanej.
ITVF również nie używają BEGIN
/END
składnia, która jest kolejną rzeczą, która odróżnia je od MSTVF.
Często uważa się, że wbudowane kanały TVF mają lepszą wydajność niż wielowyrazowe kanały TVF, chociaż będzie to również zależeć od tego, co próbujesz zrobić w funkcji.
Przykład wbudowanej funkcji z wartościami tabelarycznymi
Oto przykład podstawowego ITVF:
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int) RETURNS TABLE AS RETURN ( SELECT al.ArtistId, al.AlbumName, g.Genre FROM dbo.Albums al INNER JOIN dbo.Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON al.GenreId = g.GenreId WHERE al.ArtistId = @ArtistId ); GO
Zasadniczo składa się z SELECT
instrukcja zapakowana w inny kod. Aby konkretnie uczynić go wbudowanym TVF, uruchomiłem funkcję z RETURNS TABLE
, a zaraz po nim RETURN
, a kończąc na SELECT
oświadczenie w nawiasach.
Wiele instrukcji
Chociaż wbudowane funkcje z wartościami tabelarycznymi nie są przeznaczone dla wielu SELECT
oświadczenia (do tego służą MSTVF), możliwe jest użycie UNION
operator do łączenia zestawu wyników wielu instrukcji.
Przykład:
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70)) RETURNS TABLE AS RETURN ( SELECT CONCAT('Cat', ' ', CatId) AS PetId, CatName FROM dbo.Cats WHERE CatName = @PetName UNION ALL SELECT CONCAT('Dog', ' ', DogId) AS PetId, DogName FROM dbo.Dogs WHERE DogName = @PetName ); GO
Opcje funkcji
Możesz także określić takie rzeczy jak, czy używać wiązania schematu (prawdopodobnie powinieneś) i czy szyfrować funkcję.
Powiązanie schematu zapobiegnie wszelkim niekorzystnym zmianom dokonywanym w bazowych obiektach, od których zależy funkcja (takich jak upuszczenie tabeli, zmiana kolumny itp.).
Szyfrowanie przekonwertuje definicję funkcji na format zaciemniony (aby uniemożliwić innym odczytanie jej).
Zobacz Tworzenie wbudowanej funkcji z wartościami tabelarycznymi, aby zapoznać się z przykładami dodawania powiązania schematu i szyfrowania do ITVF.