I SQL Server, funktionen tabellvärde med flera påståenden är en av två typer av Transact-SQL-tabellvärderade funktioner (den andra typen är den inline-tabellvärderade funktionen).
Table-valued functions (TVF) är en typ av användardefinierad funktion som returnerar sina resultat som en tabell. De kan därför frågas precis som en vanlig tabell.
TVF:er med flera påståenden (ibland kallade MSTVFs) kan bestå av flera satser, vars resultat lagras i en returvariabel. Du inkluderar specifikationerna för returvariabeln överst i funktionen. Detta anger strukturen för returtabellen. Du anger med andra ord hur många kolumner, deras namn, datatyper etc.
Detta till skillnad från inline TVF:er (även kallade ITVFs), som inte använder en returvariabel (returtabellen definieras av SELECT
) påstående).
MTVFs använder också BEGIN
/END
syntax, vilket är en annan sak som skiljer dem från ITVF:er (ITVF:er använder inte den syntaxen).
Exempel på en funktion med flera uttalanden i tabellvärden
Här är ett exempel på en grundläggande MTVF:
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
Här startar jag funktionen genom att definiera returvariabeln som heter @pets
. Det är av typen tabell , och det kommer att returnera två kolumner.
I det här fallet har jag två SELECT
satser och en IF
påstående. Resultaten av var och en lagras i returvariabeln. Detta görs via en INSERT
uttalande varje gång.
Funktionsalternativ
Du kan också specificera saker som om du ska använda schemabindning eller inte (det borde du förmodligen) och om du ska kryptera funktionen eller inte.
Schemabindning kommer att förhindra att några negativa ändringar görs av de underliggande objekten som funktionen beror på (som att ta bort en tabell, ändra en kolumn, etc).
Kryptering kommer att konvertera funktionens definition till ett obfuskerat format (för att förhindra att andra kan läsa den).
Se Skapa en funktion med flera värden för tabeller för exempel på hur man lägger till schemabindning och kryptering till en ITVF.