Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Въведение в функциите с таблично стойности с множество оператори (MSTVF) в SQL Server

В SQL Server, функцията със стойност на таблица с множество изрази е един от двата типа функции с таблично стойности на Transact-SQL (другият тип е вградената функция с стойност на таблица).

Функциите с таблично стойности (TVF) са тип дефинирана от потребителя функция, която връща резултатите си като таблица. Следователно те могат да бъдат запитани точно като нормална таблица.

TVF с множество оператори (понякога наричани MSTVF) могат да се състоят от множество изрази, резултатите от които се съхраняват в променлива за връщане. Вие включвате спецификациите на връщащата променлива в горната част на функцията. Това определя структурата на таблицата за връщане. С други думи, вие посочвате колко колони, техните имена, типове данни и т.н.

Това е в контраст с вградените TVF (наричани още ITVF), които не използват връщаща променлива (таблицата за връщане се дефинира от SELECT изявление).

MSTVF също използват BEGIN /END синтаксис, което е друго нещо, което ги отличава от ITVF (ITVF не използват този синтаксис).

Пример за функция с таблична стойност с множество изрази

Ето пример за основен 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

Тук стартирам функцията, като дефинирам връщащата променлива, наречена @pets . Това е тип таблица и ще върне две колони.

В този случай имам две SELECT оператори и IF изявление. Резултатите от всеки от тях се съхраняват в променливата за връщане. Това се прави чрез INSERT изявление всеки път.

Опции за функции

Можете също да посочите неща като дали да използвате или не свързване на схема (вероятно трябва) и дали да шифровате функцията или не.

Обвързването на схемата ще предотврати извършването на всякакви неблагоприятни промени в основните обекти, от които зависи функцията (като отпадане на таблица, промяна на колона и т.н.).

Шифроването ще преобразува дефиницията на функцията в обфускиран формат (за да попречи на другите да могат да я прочетат).

Вижте Създаване на функция с многозначни таблични стойности за примери за добавяне на обвързване на схема и криптиране към 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. Как да заменя няколко знака в SQL?

  2. Съвети за използване на SQL Server с Salesforce SOQL

  3. Как виждате ЦЕЛИЯ текст от ntext или nvarchar(max) в SSMS?

  4. SqlDependency не задейства събитие OnChange, когато наборът от данни е променен

  5. Как да инсталирате SQL Server Manager Studio (SSMS) - SQL Server / TSQL урок, част 1