Di SQL Server, fungsi bernilai tabel multi-pernyataan adalah salah satu dari dua jenis fungsi bernilai tabel Transact-SQL (jenis lainnya adalah fungsi bernilai tabel sebaris).
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 multi-pernyataan (kadang-kadang disebut sebagai MSTVF) dapat terdiri dari beberapa pernyataan, yang hasilnya disimpan dalam variabel kembalian. Anda menyertakan spesifikasi variabel kembali di bagian atas fungsi. Ini menentukan struktur tabel kembali. Dengan kata lain, Anda menentukan berapa banyak kolom, namanya, tipe data, dll.
Ini berbeda dengan TVF inline (juga disebut sebagai ITVF), yang tidak menggunakan variabel kembali (tabel kembali ditentukan oleh SELECT
penyataan).
MSTVF juga menggunakan BEGIN
/END
sintaks, yang merupakan hal lain yang membedakannya dari ITVF (ITVF tidak menggunakan sintaks tersebut).
Contoh Fungsi Bernilai Tabel Multi-Pernyataan
Berikut ini contoh MSTVF dasar:
CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70)) RETURNS @pets TABLE ( PetId varchar(20), PetName varchar(70) ) AS BEGIN INSERT INTO @pets SELECT CONCAT('Cat', ' ', CatId), CatName FROM dbo.Cats WHERE CatName = @PetName; INSERT INTO @pets SELECT CONCAT('Dog', ' ', DogId), DogName FROM dbo.Dogs WHERE DogName = @PetName; IF @@ROWCOUNT = 0 BEGIN INSERT INTO @pets VALUES ( '', 'There are no pets of that name.' ) END RETURN; END; GO
Di sini, saya memulai fungsi dengan mendefinisikan variabel kembalian yang disebut @pets
. Jenisnya tabel , dan itu akan mengembalikan dua kolom.
Dalam hal ini saya memiliki dua SELECT
pernyataan dan IF
penyataan. Hasil masing-masing disimpan dalam variabel kembali. Ini dilakukan melalui INSERT
pernyataan setiap kali.
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 Bernilai Multi untuk contoh menambahkan pengikatan skema dan enkripsi ke ITVF.