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.