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.