I SQL Server, den indbyggede tabelværdi-funktion er en af to typer Transact-SQL-tabelværdier-funktioner (den anden type er tabelværdi-funktionen med flere sætninger).
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.
Inline TVF'er (nogle gange omtalt som ITVF'er) har ikke tilknyttede returvariabler. Returværdien er defineret gennem en enkelt SELECT udmelding. Denne erklæring definerer strukturen af returtabellen. Dette er i modsætning til TVF'er med flere sætninger (også kaldet MSTVF'er), som kræver en returvariabel.
ITVF'er bruger heller ikke BEGIN /END syntaks, hvilket er en anden ting, der adskiller dem fra MSTVF'er.
Inline TVF'er anses ofte for at have bedre ydeevne i forhold til multi-statement TVF'er, selvom dette også vil afhænge af, hvad du forsøger at gøre i funktionen.
Eksempel på en inline-tabel-vurderet funktion
Her er et eksempel på en grundlæggende 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
Den består grundlæggende af en SELECT erklæring pakket ind i en anden kode. For specifikt at gøre det til en inline TVF, jeg startede funktionen med RETURNS TABLE , tæt efterfulgt af RETURN , og slutter med en SELECT udsagn inden for parentes.
Flere udsagn
Selvom inline tabelværdierede funktioner ikke er designet til flere SELECT sætninger (det er hvad MSTVF'er er til), er det muligt at bruge UNION operator for at kombinere resultatsættet af flere udsagn.
Eksempel:
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
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 inline-tabel-værdisat funktion for eksempler på tilføjelse af skemabinding og kryptering til en ITVF.