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

Buat Fungsi Bernilai Tabel di SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memahami Penganalisis Beban Kerja untuk Memetakan Kemacetan Kinerja

  2. Milidetik di DateTime saya berubah saat disimpan di SQL Server

  3. Cara Menghapus File Data dari Database SQL Server (T-SQL)

  4. 11 praktik terbaik indeks SQL Server untuk penyetelan kinerja yang lebih baik

  5. Kembalikan Daftar Semua Pemicu Server di SQL Server