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

Co to jest funkcja wartościująca tabelę w programie SQL Server?

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ępnie SELECT 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak monitorować zmiany w tabeli programu SQL Server za pomocą c#?

  2. Jak zainstalować SQL Server w systemie Windows

  3. Używanie zmiennej w instrukcji SQL LIKE

  4. Sprawdź niewysłaną pocztę w SQL Server (T-SQL)

  5. Co to jest serwer SQL?