Fungsi yang ditentukan pengguna
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instancetitik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric
Seperti fungsi dalam bahasa pemrograman, fungsi yang ditentukan pengguna SQL Server adalah rutinitas yang menerima parameter, melakukan tindakan, seperti perhitungan kompleks, dan mengembalikan hasil tindakan tersebut sebagai nilai. Nilai yang dikembalikan dapat berupa nilai skalar tunggal atau tataan hasil.
Manfaat fungsi yang ditentukan pengguna
Mengapa menggunakan fungsi yang ditentukan pengguna (UDF)?
Pemrograman modular. Anda dapat membuat fungsi sekali, menyimpannya di database, dan memanggilnya beberapa kali dalam program Anda. Fungsi yang ditentukan pengguna dapat dimodifikasi secara independen dari kode sumber program.
Eksekusi yang lebih cepat. Mirip dengan prosedur tersimpan, fungsi yang ditentukan pengguna Transact-SQL mengurangi biaya kompilasi kode Transact-SQL dengan menyimpan paket dan menggunakannya kembali untuk eksekusi berulang. Ini berarti fungsi yang ditentukan pengguna tidak perlu direparasi dan dioptimasi ulang dengan setiap penggunaan menghasilkan waktu eksekusi yang jauh lebih cepat.
Fungsi CLR menawarkan keunggulan performa yang signifikan daripada fungsi Transact-SQL untuk tugas komputasi, manipulasi string, dan logika bisnis. Fungsi Transact-SQL lebih cocok untuk logika intensif akses data.
Kurangi lalu lintas jaringan. Operasi yang memfilter data berdasarkan beberapa batasan kompleks yang tidak dapat diekspresikan dalam ekspresi skalar tunggal dapat diekspresikan sebagai fungsi. Fungsi kemudian dapat dipanggil dalam klausul WHERE untuk mengurangi jumlah baris yang dikirim ke klien.
Penting
UDF Transact-SQL dalam kueri hanya dapat dijalankan pada satu utas (rencana eksekusi serial). Oleh karena itu, menggunakan UDF menghambat pemrosesan kueri paralel. Untuk informasi selengkapnya tentang pemrosesan kueri paralel, lihat Panduan Arsitektur Pemrosesan Kueri.
Jenis-jenis fungsi
Fungsi bernilai skalar
Fungsi skalar yang ditentukan pengguna mengembalikan nilai data tunggal dari jenis yang ditentukan dalam klausa RETURNS. Untuk fungsi skalar sebaris, nilai skalar yang dikembalikan adalah hasil dari satu pernyataan. Untuk fungsi skalar multistatement, isi fungsi dapat berisi serangkaian pernyataan Transact-SQL yang mengembalikan nilai tunggal. Jenis pengembalian dapat berupa jenis data apa pun kecuali teks, ntext, gambar, kursor, dan tanda waktu. Misalnya, lihat Membuat fungsi yang ditentukan pengguna (mesin database).
Fungsi bernilai tabel
Fungsi bernilai tabel (TVF) yang ditentukan pengguna mengembalikan jenis data tabel . Untuk fungsi bernilai tabel sebaris, tidak ada isi fungsi; tabel adalah kumpulan hasil dari satu pernyataan SELECT. Misalnya, lihat Membuat fungsi yang ditentukan pengguna (mesin database).
Fungsi sistem
SQL Server menyediakan banyak fungsi sistem yang dapat Anda gunakan untuk melakukan berbagai operasi. Mereka tidak dapat dimodifikasi. Untuk informasi selengkapnya, lihat Fungsi Bawaan (Transact-SQL), Fungsi Tersimpan Sistem (Transact-SQL), dan Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL).
Panduan
Kesalahan T-SQL yang menyebabkan pernyataan dibatalkan dan dilanjutkan dengan pernyataan berikutnya dalam modul (seperti pemicu atau prosedur tersimpan) diperlakukan secara berbeda di dalam fungsi. Dalam fungsi, kesalahan tersebut menyebabkan eksekusi fungsi berhenti. Hal ini pada gilirannya menyebabkan pernyataan yang memanggil fungsi dibatalkan.
Pernyataan dalam BEGIN...END
blok tidak dapat memiliki efek samping. Efek samping fungsi adalah setiap perubahan permanen pada status sumber daya yang memiliki cakupan di luar fungsi seperti modifikasi pada tabel database. Satu-satunya perubahan yang dapat dilakukan oleh pernyataan dalam fungsi adalah perubahan pada objek lokal ke fungsi, seperti kursor atau variabel lokal. Modifikasi pada tabel database, operasi pada kursor yang tidak lokal ke fungsi, mengirim email, mencoba modifikasi katalog, dan menghasilkan kumpulan hasil yang dikembalikan ke pengguna adalah contoh tindakan yang tidak dapat dilakukan dalam fungsi.
CREATE FUNCTION
Jika pernyataan menghasilkan efek samping terhadap sumber daya yang tidak ada saat CREATE FUNCTION
pernyataan dikeluarkan, SQL Server menjalankan pernyataan. Namun, SQL Server tidak menjalankan fungsi saat dipanggil.
Berapa kali fungsi yang ditentukan dalam kueri dijalankan dapat bervariasi di antara rencana eksekusi yang dibangun oleh pengoptimal. Contohnya adalah fungsi yang dipanggil oleh subkueri dalam WHERE
klausa. Berapa kali subkueri dan fungsinya dijalankan dapat bervariasi dengan jalur akses yang berbeda yang dipilih oleh pengoptimal.
Fungsi deterministik harus terikat skema. SCHEMABINDING
Gunakan klausa saat membuat fungsi deterministik.
Untuk informasi selengkapnya dan pertimbangan performa pada fungsi yang ditentukan pengguna, lihat Membuat Fungsi yang Ditentukan Pengguna (Mesin Database).
Pernyataan yang valid dalam fungsi
Jenis pernyataan yang valid dalam fungsi meliputi:
DECLARE
pernyataan dapat digunakan untuk menentukan variabel data dan kursor yang lokal untuk fungsi.Penetapan nilai ke objek lokal ke fungsi, seperti menggunakan
SET
untuk menetapkan nilai ke variabel lokal skalar dan tabel.Operasi kursor yang mereferensikan kursor lokal yang dideklarasikan, dibuka, ditutup, dan dibatalkan alokasinya dalam fungsi.
FETCH
pernyataan yang mengembalikan data ke klien tidak diizinkan. Hanya pernyataan FETCH yang menetapkan nilai ke variabel lokal menggunakanINTO
klausa yang diizinkan.Pernyataan kontrol aliran kecuali
TRY...CATCH
pernyataan.SELECT
pernyataan yang berisi daftar pilihan dengan ekspresi yang menetapkan nilai ke variabel yang bersifat lokal untuk fungsi.UPDATE
,INSERT
, danDELETE
pernyataan memodifikasi variabel tabel yang bersifat lokal ke fungsi.EXECUTE
pernyataan yang memanggil prosedur tersimpan yang diperluas.
Fungsi sistem bawaan
Fungsi bawaan nondeterministik berikut dapat digunakan dalam fungsi yang ditentukan pengguna Transact-SQL.
- CURRENT_TIMESTAMP
- GET_TRANSMISSION_STATUS
- GETDATE
- GETUTCDATE
- @@CONNECTIONS
- @@CPU_BUSY
- @@DBTS
- @@IDLE
- @@IO_BUSY
- @@MAX_CONNECTIONS
- @@PACK_RECEIVED
- @@PACK_SENT
- @@PACKET_ERRORS
- @@TIMETICKS
- @@TOTAL_ERRORS
- @@TOTAL_READ
- @@TOTAL_WRITE
Fungsi bawaan nondeterministik berikut tidak dapat digunakan dalam fungsi yang ditentukan pengguna Transact-SQL.
- NEWID
- NEWSEQUENTIALID
- RAND
- TEXTPTR
Untuk daftar fungsi sistem bawaan deterministik dan nondeterministik, lihat Fungsi Deterministik dan Nondeterministik.
Fungsi terikat skema
CREATE FUNCTION
mendukung klausa SCHEMABINDING
yang mengikat fungsi ke skema objek apa pun yang dirujuknya, seperti tabel, tampilan, dan fungsi lain yang ditentukan pengguna. Upaya untuk mengubah atau menghilangkan objek apa pun yang dirujuk oleh fungsi terikat skema gagal.
Kondisi ini harus dipenuhi sebelum Anda dapat menentukan SCHEMABINDING
dalam CREATE FUNCTION:
Semua tampilan dan fungsi yang ditentukan pengguna yang dirujuk oleh fungsi harus terikat skema.
Semua objek yang dirujuk oleh fungsi harus berada dalam database yang sama dengan fungsi . Objek harus dirujuk menggunakan nama satu bagian atau dua bagian.
Anda harus memiliki
REFERENCES
izin pada semua objek (tabel, tampilan, dan fungsi yang ditentukan pengguna) yang dirujuk dalam fungsi.
Anda dapat menggunakan ALTER FUNCTION
untuk menghapus pengikatan skema. Pernyataan ALTER FUNCTION
harus menentukan ulang fungsi tanpa menentukan WITH SCHEMABINDING
.
Menentukan parameter
Fungsi yang ditentukan pengguna mengambil parameter input nol atau lebih dan mengembalikan nilai skalar atau tabel. Fungsi dapat memiliki maksimum 1024 parameter input. Ketika parameter fungsi memiliki nilai default, kata kunci DEFAULT harus ditentukan saat memanggil fungsi untuk mendapatkan nilai default. Perilaku ini berbeda dari parameter dengan nilai default dalam prosedur tersimpan yang ditentukan pengguna di mana menghilangkan parameter juga menyiratkan nilai default. Fungsi yang ditentukan pengguna tidak mendukung parameter output.
Baca juga
- Membuat Fungsi yang Ditentukan Pengguna (Mesin Database)
- Membuat Fungsi CLR
- Membuat Agregat yang ditentukan pengguna
- Mengubah Fungsi yang Ditentukan Pengguna
- Menghapus Fungsi yang Ditentukan Pengguna
- Jalankan Fungsi yang Ditentukan Pengguna
- Mengganti nama Fungsi yang Ditentukan Pengguna
- Menampilkan Fungsi yang ditentukan pengguna
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk