W SQL Server funkcja z wartościami przechowywanymi w tabeli (TVF) to funkcja zdefiniowana przez użytkownika, która zwraca tabelę. Jest to przeciwieństwo funkcji skalarnej, która zwraca pojedynczą wartość.
Funkcję z wartością przechowywaną w tabeli można wywołać w taki sam sposób, w jaki można wykonać zapytanie dotyczące tabeli. Na przykład możesz użyć go w SELECT
oświadczenie. W niektórych przypadkach do aktualizowania, usuwania i wstawiania danych można również używać funkcji z wartościami przechowywanymi w tabeli.
Rodzaje funkcji o wartościach tabelarycznych
Podczas tworzenia funkcji z wartościami przechowywanymi w tabeli masz możliwość utworzenia funkcji z wartościami przechowywanymi w tabeli Transact-SQL lub funkcji z wartościami przechowywanymi w tabeli języka wspólnego (CLR).
Funkcje języka Transact-SQL z wartościami tabelowymi
Transact-SQL TVF może być jednym z następujących:
- Wbudowana funkcja z wartościami tabelarycznymi (ITVF)
- Kiedy tworzysz ITVF, zaczynasz definicję funkcji od
RETURNS TABLE
, a następnieSELECT
instrukcja definiuje strukturę tabeli zwrotów. - Wieloinstancyjna funkcja z wartościami tabelarycznymi (MSTVF)
- Funkcja wieloinstrukcyjna z wartościami przechowywanymi w tabeli może zawierać wiele instrukcji, których wyniki są zapisywane w zmiennej zadeklarowanej na początku funkcji. Gdy to zrobisz, jawnie określisz strukturę tabeli zwracanej.
Funkcje CLR o wartościach tabelarycznych
Z perspektywy CLR składnia jest podobna do ITVF T-SQL, ale nieco inna. Określasz jawnie strukturę tabeli zwracanej, ale nie deklarujesz zmiennej zwracanej.
Funkcje CLR z wartościami przechowywanymi w tabeli są implementowane jako metody w klasie w zestawie Microsoft .NET Framework.
Aby uzyskać bardziej szczegółowy przegląd funkcji CLR TVF, zapoznaj się z dokumentacją firmy Microsoft dotyczącą funkcji CLR o wartościach tabelarycznych.
Przykład 1 – Wbudowana funkcja z wartościami tabelarycznymi
Oto przykład kodu T-SQL używanego do tworzenia wbudowanej funkcji z wartościami tabelarycznymi.
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); GO
Możemy powiedzieć, że jest to wbudowana funkcja z wartościami tabelarycznymi, ponieważ nie określa struktury tabeli zwracanej. Po prostu stwierdza RETURNS TABLE
, a następnie polega na SELECT
instrukcja do określenia struktury tabeli zwrotów.
W takim przypadku funkcja wymaga podania imienia kota jako argumentu.
Zobacz Tworzenie wbudowanej funkcji z wartościami przechowywanymi w tabeli, aby zapoznać się z przykładami dodawania opcji, takich jak powiązanie schematu i szyfrowanie.
Wiązanie schematu jest zwykle dobrym pomysłem, ponieważ zapobiega wprowadzaniu niepożądanych zmian w podstawowych obiektach, do których odwołuje się funkcja.
Przykład 2 – Wielowyrazowa funkcja z wartościami tabelarycznymi
Oto, jak napisalibyśmy funkcję, gdybyśmy chcieli, aby była to wieloinstrukcyjna funkcja z wartościami w tabeli.
CREATE FUNCTION udf_CatsByName_MSTVF( @CatName varchar(70) ) RETURNS @cats TABLE ( CatId int, CatName varchar(70), Phone varchar(10) ) AS BEGIN INSERT INTO @cats SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName; RETURN; END; GO
W tym przypadku używamy zmiennej typu tabela o nazwie @cats
i wyraźnie określamy strukturę tabeli zwrotów. Wyniki zapytania są przechowywane w tej zmiennej, która jest następnie zwracana po wywołaniu funkcji.
Ten przykład nie oddaje sprawiedliwości MSTVF, ponieważ zawieram tylko jedno stwierdzenie. Głównym punktem MSTVF jest to, że możesz uwzględnić wiele instrukcji i możesz dodać dane wyjściowe tych instrukcji do zmiennej zwracanej.
Zobacz Tworzenie funkcji z wartościami tabelowymi składającymi się z wielu instrukcji, aby zapoznać się z przykładem użycia wielu instrukcji, a także przykładów dodawania opcji, takich jak wiązanie schematu i szyfrowanie.
Przykład 3 – Wybierz dane z naszych funkcji z wartościami tabelarycznymi
Teraz, gdy stworzyliśmy nasze funkcje, możemy je wywołać za pomocą SELECT
oświadczenie.
SELECT * FROM udf_CatsByName_ITVF('Tom'); SELECT * FROM udf_CatsByName_MSTVF('Tom');
Wynik:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 3 | Tom | 7871237652 | +---------+-----------+------------+ (1 row affected) +---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 3 | Tom | 7871237652 | +---------+-----------+------------+ (1 row affected)
Zarówno ITVF, jak i MSTVF zostały wywołane przy użyciu tej samej składni i oba zwróciły ten sam wynik.
Wywoływanie funkcji o wartościach tabelarycznych
Funkcje z wartościami przechowywanymi w tabeli mogą być wywoływane, gdy wyrażenia tabelowe są dozwolone w FROM
klauzula SELECT
, INSERT
, UPDATE
lub DELETE
oświadczenia.
Oznacza to, że możesz wybierać dane, wstawiać dane, aktualizować dane, a nawet usuwać dane za pomocą funkcji z wartościami w tabeli.
Oto artykuły, które pokazują każdy z nich:
- Wybierz dane za pomocą funkcji z wartościami tabelarycznymi
- Aktualizuj dane za pomocą funkcji z wartościami tabeli
- Wstaw dane za pomocą funkcji z wartościami tabeli
- Usuń dane za pomocą funkcji z wartościami tabeli