W SQL Server wieloinstrukcyjna funkcja z wartościami tabelarycznymi jest jednym z dwóch typów funkcji z wartościami tabelarycznymi Transact-SQL (drugi typ to wbudowana funkcja z wartościami tabelarycznymi).
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 samo, jak normalny stół.
Wielowyrazowe polecenia TVF (czasami określane jako MSTVF) mogą składać się z wielu instrukcji, których wyniki są przechowywane w zmiennej zwracanej. W górnej części funkcji podajesz specyfikacje zwracanej zmiennej. Określa strukturę tabeli zwrotów. Innymi słowy, określasz liczbę kolumn, ich nazwy, typy danych itp.
Jest to w przeciwieństwie do wbudowanych funkcji TVF (określanych również jako ITVF), które nie używają zmiennej zwrotnej (tabela zwrotów jest zdefiniowana przez SELECT oświadczenie).
MSTVF również używają BEGIN /END składnia, która jest kolejną rzeczą, która odróżnia je od ITVF (ITVF nie używają tej składni).
Przykład funkcji wielowyrazowej z wartościami tabelarycznymi
Oto przykład podstawowego MSTVF:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70))
RETURNS @pets TABLE (
PetId varchar(20),
PetName varchar(70)
)
AS
BEGIN
INSERT INTO @pets
SELECT
CONCAT('Cat', ' ', CatId),
CatName
FROM dbo.Cats
WHERE CatName = @PetName;
INSERT INTO @pets
SELECT
CONCAT('Dog', ' ', DogId),
DogName
FROM dbo.Dogs
WHERE DogName = @PetName;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO @pets
VALUES (
'',
'There are no pets of that name.'
)
END
RETURN;
END;
GO
Tutaj uruchamiam funkcję, definiując zmienną zwracaną o nazwie @pets . Jest typu tabela i zwróci dwie kolumny.
W tym przypadku mam dwa SELECT oświadczenia i IF oświadczenie. Wyniki każdego z nich są przechowywane w zmiennej zwracanej. Odbywa się to poprzez INSERT oświadczenie za każdym razem.
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 wielowartościowej funkcji z wartościami tabelarycznymi, aby zapoznać się z przykładami dodawania powiązania schematu i szyfrowania do ITVF.