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

Wprowadzenie do wbudowanych funkcji z wartościami tabelarycznymi (ITVF) w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Informacje o poleceniu GO w SQL Server

  2. Jaki typ danych powinien być używany do przechowywania numerów telefonów w SQL Server 2005?

  3. Sprawdź, czy tabela istnieje, a jeśli nie, utwórz ją w SQL Server 2008

  4. Jak rzeczy i „Dla ścieżki XML” działają w programie SQL Server?

  5. Jak mogę wstawić dane do SQL Server za pomocą VBNet?