Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa itu Fungsi Bernilai Tabel di SQL Server?

Di SQL Server, fungsi bernilai tabel (TVF) adalah fungsi yang ditentukan pengguna yang mengembalikan tabel. Ini berbeda dengan fungsi skalar, yang mengembalikan nilai tunggal.

Anda bisa memanggil fungsi bernilai tabel dengan cara yang sama seperti Anda bisa membuat kueri tabel. Misalnya, Anda dapat menggunakannya dalam SELECT penyataan. Dalam beberapa kasus, fungsi bernilai tabel juga dapat digunakan untuk memperbarui, menghapus, dan menyisipkan data.

Jenis Fungsi Bernilai Tabel

Saat Anda membuat fungsi bernilai tabel, Anda memiliki pilihan untuk membuat fungsi bernilai tabel Transact-SQL atau fungsi bernilai tabel Common Language Runtime (CLR).

Fungsi Bernilai Tabel Transact-SQL

TVF Transact-SQL dapat berupa salah satu dari berikut ini:

Fungsi Bernilai Tabel Sebaris (ITVF)
Saat Anda membuat ITVF, Anda memulai definisi fungsi dengan RETURNS TABLE , dan SELECT subsequent berikutnya pernyataan mendefinisikan struktur tabel kembali.
Fungsi Bernilai Tabel Multi-Pernyataan (MSTVF)
Fungsi bernilai tabel multi-pernyataan dapat berisi beberapa pernyataan, yang hasilnya disimpan ke variabel yang Anda deklarasikan di awal fungsi. Ketika Anda melakukan ini, Anda secara eksplisit menentukan struktur tabel kembali.

Fungsi Bernilai Tabel CLR

Dari perspektif CLR, sintaksnya mirip dengan T-SQL ITVF, tetapi sedikit berbeda. Anda secara eksplisit menentukan struktur tabel pengembalian, tetapi Anda tidak mendeklarasikan variabel pengembalian.

Fungsi bernilai tabel CLR diimplementasikan sebagai metode pada kelas dalam rakitan Microsoft .NET Framework.

Untuk ikhtisar yang lebih mendetail tentang CLR TVF, lihat dokumentasi Microsoft untuk CLR Table-Valued Functions.

Contoh 1 – Fungsi Bernilai Tabel Sebaris

Berikut adalah contoh kode T-SQL yang digunakan untuk membuat fungsi bernilai tabel sebaris.

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );
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 tersebut membutuhkan nama kucing untuk 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 udf_CatsByName_MSTVF( @CatName varchar(70) )
    RETURNS @cats TABLE (
        CatId int,
        CatName varchar(70),
        Phone varchar(10)
    )
AS
BEGIN
    INSERT INTO @cats
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName;

    RETURN;
END;
GO

Dalam hal ini, kami menggunakan variabel bertipe tabel disebut @cats dan kami secara eksplisit menentukan struktur tabel kembali. Hasil kueri disimpan dalam variabel itu, yang kemudian dikembalikan saat fungsi dipanggil.

Contoh ini tidak memberikan banyak keadilan bagi MSTVF, karena saya hanya menyertakan satu pernyataan. Poin utama MSTVF adalah Anda dapat menyertakan beberapa pernyataan, dan Anda dapat menambahkan output dari pernyataan tersebut ke variabel kembali.

Lihat Membuat Fungsi Bernilai Tabel Multi-Pernyataan untuk contoh penggunaan beberapa pernyataan, serta contoh penambahan opsi seperti pengikatan skema dan enkripsi.

Contoh 3 – Pilih Data dari Fungsi Bernilai Tabel

Jadi sekarang kita telah membuat fungsi kita, kita dapat memanggil keduanya menggunakan SELECT penyataan.

SELECT * FROM udf_CatsByName_ITVF('Tom');
SELECT * FROM udf_CatsByName_MSTVF('Tom');

Hasil:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)
+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)

Baik ITVF dan MSTVF dipanggil menggunakan sintaks yang sama dan keduanya mengembalikan hasil yang sama.

Memanggil Fungsi Bernilai Tabel

Fungsi bernilai tabel dapat dipanggil jika ekspresi tabel diizinkan di FROM klausa SELECT , INSERT , UPDATE , atau DELETE pernyataan.

Ini berarti Anda dapat memilih data, menyisipkan data, memperbarui data, dan bahkan menghapus data melalui fungsi bernilai tabel.

Berikut adalah artikel yang menunjukkan masing-masing:

  • Memilih Data melalui Fungsi Bernilai Tabel
  • Memperbarui Data melalui Fungsi Bernilai Tabel
  • Menyisipkan Data melalui Fungsi Bernilai Tabel
  • Menghapus Data melalui Fungsi Bernilai Tabel

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memperbaiki:"SQLServerAgent saat ini tidak berjalan ..."

  2. LANTAI () Contoh di SQL Server

  3. Apakah mungkin untuk mengeksekusi file teks dari kueri SQL?

  4. Tingkatkan penyetelan kinerja SQL Server dengan 3 tips ini

  5. Dapatkan Daftar Semua Kolom Null dan Bukan Null di Database SQL Server - Tutorial SQL Server / T-SQL Bagian 53