В 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
изявления.
Това означава, че можете да избирате данни, да вмъквате данни, да актуализирате данни и дори да изтривате данни чрез функция с таблица.
Ето статии, които демонстрират всяка една от тях:
- Изберете данни чрез функция с таблична стойност
- Актуализиране на данните чрез функция с таблична стойност
- Вмъкване на данни чрез функция с таблична стойност
- Изтриване на данни чрез функция с таблична стойност