Di SQL Server, fungsi bernilai tabel sebaris adalah salah satu dari dua jenis fungsi bernilai tabel Transact-SQL (jenis lainnya adalah fungsi bernilai tabel multi-pernyataan).
Fungsi bernilai tabel (TVF) adalah jenis fungsi yang ditentukan pengguna yang mengembalikan hasilnya sebagai tabel. Oleh karena itu mereka dapat ditanyakan seperti tabel normal.
TVF sebaris (terkadang disebut sebagai ITVF) tidak memiliki variabel hasil yang terkait. Nilai kembalian ditentukan melalui satu SELECT penyataan. Pernyataan ini mendefinisikan struktur tabel kembali. Ini berbeda dengan TVF multi-pernyataan (juga disebut sebagai MSTVF), yang memang membutuhkan variabel pengembalian.
ITVF juga tidak menggunakan BEGIN /END sintaks, yang merupakan hal lain yang membedakannya dari MSTVF.
TVF inline sering dianggap memiliki kinerja yang lebih baik daripada TVF multi-pernyataan, meskipun ini juga akan bergantung pada apa yang Anda coba lakukan dalam fungsi tersebut.
Contoh Fungsi Bernilai Tabel Sebaris
Berikut ini contoh ITVF dasar:
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
Ini pada dasarnya terdiri dari SELECT pernyataan dibungkus di dalam beberapa kode lain. Untuk secara khusus menjadikannya sebaris TVF, saya memulai fungsinya dengan RETURNS TABLE , diikuti dengan RETURN , dan diakhiri dengan SELECT pernyataan di dalam tanda kurung.
Beberapa Pernyataan
Meskipun fungsi bernilai tabel sebaris tidak dirancang untuk beberapa SELECT pernyataan (untuk itulah MSTVF), dimungkinkan untuk menggunakan UNION operator untuk menggabungkan kumpulan hasil dari beberapa pernyataan.
Contoh:
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
Opsi Fungsi
Anda juga dapat menentukan hal-hal seperti, apakah akan menggunakan pengikatan skema atau tidak (mungkin sebaiknya), dan apakah akan mengenkripsi fungsi atau tidak.
Pengikatan skema akan mencegah perubahan merugikan apa pun yang dilakukan pada objek dasar yang menjadi sandaran fungsi tersebut (seperti menjatuhkan tabel, mengubah kolom, dll).
Enkripsi akan mengonversi definisi fungsi ke format yang dikaburkan (untuk mencegah orang lain dapat membacanya).
Lihat Membuat Fungsi Bernilai Tabel Sebaris untuk contoh penambahan pengikatan skema dan enkripsi ke ITVF.