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.