Anda dapat membuat fungsi bernilai tabel (TVF) di SQL Server menggunakan CREATE FUNCTION Sintaks T-SQL.
Sintaksnya sedikit berbeda bergantung pada apakah Anda membuat fungsi bernilai tabel sebaris (ITVF) atau fungsi bernilai tabel multi-pernyataan (MSTVF).
Contoh 1 – Fungsi Bernilai Tabel Sebaris
Berikut adalah contoh fungsi bernilai tabel sebaris.
CREATE FUNCTION dbo.ufn_AlbumsByGenre_ITVF(@GenreId int)
RETURNS TABLE
AS
RETURN(
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM Genres g
INNER JOIN Albums al
ON g.GenreId = al.GenreId
INNER JOIN Artists ar
ON al.ArtistId = ar.ArtistId
WHERE g.GenreId = @GenreId
);
GO
Kita dapat mengatakan bahwa ini adalah fungsi bernilai tabel sebaris, karena tidak menentukan struktur tabel kembali. Ini hanya menyatakan RETURNS TABLE , kemudian bergantung pada SELECT pernyataan untuk menentukan struktur tabel kembali.
Dalam hal ini, fungsi memerlukan ID genre yang akan diteruskan sebagai argumen.
Lihat Membuat Fungsi Bernilai Tabel Sebaris untuk contoh penambahan opsi seperti pengikatan skema dan enkripsi.
Pengikatan skema biasanya merupakan ide yang baik, karena ini akan mencegah perubahan buruk apa pun yang dilakukan pada objek dasar yang dirujuk oleh fungsi tersebut.
Contoh 2 – Fungsi Bernilai Tabel Multi-Pernyataan
Inilah cara kami menulis fungsi jika kami menginginkannya menjadi fungsi bernilai tabel multi-pernyataan.
CREATE FUNCTION dbo.ufn_AlbumsByGenre_MSTVF(@GenreId int)
RETURNS @Albums TABLE (
ArtistName nvarchar(255),
AlbumName nvarchar(255),
Genre nvarchar(50)
)
AS
BEGIN
INSERT INTO @Albums
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM Genres g
INNER JOIN Albums al
ON g.GenreId = al.GenreId
INNER JOIN Artists ar
ON al.ArtistId = ar.ArtistId
WHERE g.GenreId = @GenreId
RETURN
END
GO
Dalam hal ini, kami menggunakan variabel bertipe tabel disebut @Albums dan kami secara eksplisit menentukan struktur tabel kembali. Hasil kueri disimpan dalam variabel itu, yang kemudian dikembalikan saat fungsi dipanggil.
Salah satu manfaat MSTVF adalah mereka dapat berisi banyak pernyataan. Ini dia lagi dengan tambahan bagian di akhir.
CREATE FUNCTION dbo.ufn_AlbumsByGenre_MSTVF(@GenreId int)
RETURNS @Albums TABLE (
ArtistName nvarchar(255),
AlbumName nvarchar(255),
Genre nvarchar(50)
)
AS
BEGIN
INSERT INTO @Albums
SELECT
ar.ArtistName,
al.AlbumName,
g.Genre
FROM Genres g
INNER JOIN Albums al
ON g.GenreId = al.GenreId
INNER JOIN Artists ar
ON al.ArtistId = ar.ArtistId
WHERE g.GenreId = @GenreId
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO @Albums
VALUES (
'None',
'None',
'None'
)
END
RETURN
END
GO
Lihat Membuat Fungsi Bernilai Tabel Multi-Pernyataan untuk contoh penambahan opsi seperti pengikatan skema dan enkripsi.