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

Какво е функция с таблично значение в SQL Server?

В SQL Server, функция със стойност на таблица (TVF) е дефинирана от потребителя функция, която връща таблица. Това е в контраст със скаларна функция, която връща една стойност.

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

Типове функции с таблична стойност

Когато създавате функция с таблична стойност, имате избор да създадете функция с таблична стойност на Transact-SQL или функция с таблична стойност на Common Language Runtime (CLR).

Transact-SQL функции с таблично стойности

Transact-SQL TVF може да бъде едно от следните:

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

CLR функции с таблично стойности

От гледна точка на CLR, синтаксисът е подобен на T-SQL ITVF, но малко по-различен. Вие изрично посочвате структурата на таблицата за връщане, но не декларирате променлива за връщане.

Функциите на CLR с таблична стойност се реализират като методи в клас в сборка на Microsoft .NET Framework.

За по-подробен преглед на CLR TVF, вижте документацията на Microsoft за CLR таблично-стойностни функции.

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

Ето пример за T-SQL кода, използван за създаване на вградена функция със стойност на таблица.

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );
GO

Можем да кажем, че това е вградена функция със стойност на таблица, тъй като не посочва структурата на таблицата за връщане. Той просто посочва RETURNS TABLE , след което разчита на SELECT оператор за определяне на структурата на таблицата за връщане.

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

Вижте Създаване на вградена функция с стойност на таблица за примери за добавяне на опции като свързване на схема и криптиране.

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

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

Ето как бихме написали функцията, ако искаме тя да бъде функция с таблична стойност с множество изрази.

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

В този случай използваме променлива от тип таблица наречен @cats и ние изрично указваме структурата на таблицата за връщане. Резултатите от заявката се съхраняват в тази променлива, която след това се връща при извикване на функцията.

Този пример не разкрива много справедливост на MSTVF, защото включвам само едно изявление. Основната цел на MSTVFs е, че можете да включите множество изрази и можете да добавите изхода от тези изрази към променливата за връщане.

Вижте Създаване на функция с таблична стойност с множество изрази за пример за използване на множество изрази, както и примери за добавяне на опции като свързване на схема и криптиране.

Пример 3 – Изберете данни от нашите функции с таблична стойност

Така че сега, когато създадохме нашите функции, можем да ги извикаме и двете с помощта на SELECT изявление.

SELECT * FROM udf_CatsByName_ITVF('Tom');
SELECT * FROM udf_CatsByName_MSTVF('Tom');

Резултат:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)
+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)

И ITVF, и MSTVF бяха извикани с един и същ синтаксис и и двете върнаха един и същ резултат.

Извикване на функции с таблична стойност

Функции с таблично стойности могат да бъдат извикани, където са разрешени таблични изрази в FROM клауза на SELECT , INSERT , UPDATE или DELETE изявления.

Това означава, че можете да избирате данни, да вмъквате данни, да актуализирате данни и дори да изтривате данни чрез функция с таблица.

Ето статии, които демонстрират всяка една от тях:

  • Изберете данни чрез функция с таблична стойност
  • Актуализиране на данните чрез функция с таблична стойност
  • Вмъкване на данни чрез функция с таблична стойност
  • Изтриване на данни чрез функция с таблична стойност

  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 Server

  2. Как преброявате броя на появяванията на определен подниз в SQL varchar?

  3. Как мога да открия, че заявката за създаване, актуализиране, изтриване е успешна в Codeigniter

  4. Използване на DBCC CLONEDATABASE за генериране на схема и статистически копие само на потребителска база данни в SQL Server 2014 SP2

  5. SQL Server - транзакциите се връщат обратно при грешка?