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

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

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

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

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

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

Често се смята, че вградените TVF имат по-добра производителност в сравнение с TVF с множество оператори, въпреки че това също ще зависи от това, което се опитвате да направите във функцията.

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

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

Основно се състои от SELECT изявление, увито в някакъв друг код. За да го направите специално вграден TVF, стартирах функцията с RETURNS TABLE , следван отблизо от RETURN и завършващи с SELECT израз в скоби.

Множество изявления

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

Пример:

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

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

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

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

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

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

  2. Конкатенация на низове на SQL Server с Null

  3. SQL:Изберете динамично име на колона въз основа на променлива

  4. Топ 5 функции, които вашата платформа за мониторинг на ефективността на базата данни на SQL Server трябва да предостави

  5. Как мога да вмъкна данни в SQL Server с помощта на VBNet