Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wprowadzenie do wielowyrazowych funkcji z wartościami tabelarycznymi (MSTVF) w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. brak sqljdbc_auth w java.library.path

  2. Co to jest CZAS STATYSTYKI w SQL Server?

  3. Oblicz sumę bieżącą / bilans bieżący

  4. Kiedy i jak używać klauzuli SQL PARTITION BY

  5. Dołączanie do tabeli na podstawie wartości oddzielonych przecinkami