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

Pengantar Inline Table-Valued Functions (ITVF) di SQL Server

Di SQL Server, fungsi bernilai tabel sebaris adalah salah satu dari dua jenis fungsi bernilai tabel Transact-SQL (jenis lainnya adalah fungsi bernilai tabel multi-pernyataan).

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 sebaris (terkadang disebut sebagai ITVF) tidak memiliki variabel hasil yang terkait. Nilai kembalian ditentukan melalui satu SELECT penyataan. Pernyataan ini mendefinisikan struktur tabel kembali. Ini berbeda dengan TVF multi-pernyataan (juga disebut sebagai MSTVF), yang memang membutuhkan variabel pengembalian.

ITVF juga tidak menggunakan BEGIN /END sintaks, yang merupakan hal lain yang membedakannya dari MSTVF.

TVF inline sering dianggap memiliki kinerja yang lebih baik daripada TVF multi-pernyataan, meskipun ini juga akan bergantung pada apa yang Anda coba lakukan dalam fungsi tersebut.

Contoh Fungsi Bernilai Tabel Sebaris

Berikut ini contoh ITVF dasar:

CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int)
RETURNS TABLE
AS
RETURN (  
    SELECT 
      al.ArtistId,
      al.AlbumName,
      g.Genre
    FROM dbo.Albums al 
      INNER JOIN dbo.Artists ar 
        ON al.ArtistId = ar.ArtistId
      INNER JOIN Genres g
        ON al.GenreId = g.GenreId
    WHERE al.ArtistId = @ArtistId
);

GO

Ini pada dasarnya terdiri dari SELECT pernyataan dibungkus di dalam beberapa kode lain. Untuk secara khusus menjadikannya sebaris TVF, saya memulai fungsinya dengan RETURNS TABLE , diikuti dengan RETURN , dan diakhiri dengan SELECT pernyataan di dalam tanda kurung.

Beberapa Pernyataan

Meskipun fungsi bernilai tabel sebaris tidak dirancang untuk beberapa SELECT pernyataan (untuk itulah MSTVF), dimungkinkan untuk menggunakan UNION operator untuk menggabungkan kumpulan hasil dari beberapa pernyataan.

Contoh:

CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70))
    RETURNS TABLE 
AS
RETURN (
    SELECT 
        CONCAT('Cat', ' ', CatId) AS PetId,
        CatName
    FROM dbo.Cats
    WHERE CatName = @PetName

    UNION ALL

    SELECT 
        CONCAT('Dog', ' ', DogId) AS PetId,
        DogName
    FROM dbo.Dogs
    WHERE DogName = @PetName
    );

GO

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 Sebaris untuk contoh penambahan pengikatan skema dan enkripsi ke ITVF.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Setara dengan GROUP_CONCAT()

  2. SQL ganti semua NULL

  3. Pemantauan TempDB SQL Server dengan Menggunakan Tampilan Manajemen Dinamis (DMV)

  4. SQL Server:Temukan nilai default kolom dengan kueri

  5. Mengapa menggunakan kunci utama bukan nol di TSQL?