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.