I SQL Server, funktionen tabelværdi med flere sætninger er en af to typer Transact-SQL-tabelværdierede funktioner (den anden type er den indbyggede tabelværdi-funktion).
Table-valued functions (TVF) er en type brugerdefineret funktion, der returnerer deres resultater som en tabel. De kan derfor forespørges ligesom en normal tabel.
TVF'er med flere sætninger (nogle gange omtalt som MSTVF'er) kan bestå af flere sætninger, hvis resultater er gemt i en returvariabel. Du inkluderer specifikationerne for returvariablen øverst i funktionen. Dette angiver strukturen af returtabellen. Du angiver med andre ord, hvor mange kolonner, deres navne, datatyper osv.
Dette er i modsætning til inline TVF'er (også kaldet ITVF'er), som ikke bruger en returvariabel (returtabellen er defineret af SELECT
udmelding).
MTVF'er bruger også BEGIN
/END
syntaks, hvilket er en anden ting, der adskiller dem fra ITVF'er (ITVF'er bruger ikke den syntaks).
Eksempel på en funktion med flere erklæringer med tabelværdi
Her er et eksempel på en grundlæggende 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
Her starter jeg funktionen med at definere returvariablen kaldet @pets
. Det er af typen tabel , og det vil returnere to kolonner.
I dette tilfælde har jeg to SELECT
sætninger og en IF
udmelding. Resultaterne af hver enkelt gemmes i returvariablen. Dette gøres via en INSERT
erklæring hver gang.
Funktionsmuligheder
Du kan også specificere ting som, om du vil bruge skemabinding eller ej (det burde du nok) og om du vil kryptere funktionen eller ej.
Skemabinding vil forhindre, at der foretages uønskede ændringer af de underliggende objekter, som funktionen afhænger af (såsom at droppe en tabel, ændre en kolonne osv.).
Kryptering vil konvertere funktionens definition til et sløret format (for at forhindre andre i at kunne læse det).
Se Opret en funktion med flere værdier til tabelværdi for eksempler på tilføjelse af skemabinding og kryptering til en ITVF.