Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Di SQL Server 2016 (13.x), Anda dapat membuat dan menghilangkan fungsi yang dikompilasi dan ditentukan pengguna skalar secara asli. Anda juga dapat mengubah fungsi yang ditentukan pengguna ini. Kompilasi asli meningkatkan performa evaluasi fungsi yang ditentukan pengguna dalam Transact-SQL.
Saat Anda mengubah fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar, aplikasi tetap tersedia saat operasi sedang dijalankan dan versi baru fungsi sedang dikompilasi.
Untuk konstruksi T-SQL yang didukung, lihat Fitur yang Didukung untuk Modul T-SQL yang Dikompilasi Secara Asli.
Membuat, Menghilangkan, dan Mengubah Fungsi yang Ditentukan Pengguna
Anda menggunakan CREATE FUNCTION untuk membuat fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar, DROP FUNCTION untuk menghapus fungsi yang ditentukan pengguna, dan ALTER FUNCTION untuk mengubah fungsi. BEGIN ATOMIC WITH diperlukan untuk fungsi yang ditentukan pengguna.
Untuk informasi tentang sintaks yang didukung dan batasan apa pun, lihat topik berikut.
-
Sintaks DROP FUNCTION untuk fungsi skalar yang ditentukan pengguna dan dikompilasi secara native sama seperti sintaks untuk fungsi yang ditentukan pengguna dan diinterpretasikan.
Prosedur tersimpan sp_recompile (Transact-SQL) dapat digunakan dengan fungsi skalar yang ditentukan pengguna dan dikompilasi secara native. Ini akan mengakibatkan fungsi dikompresi ulang menggunakan definisi yang ada dalam metadata.
Sampel berikut menunjukkan UDF skalar dari database sampel AdventureWorks2022 .
CREATE FUNCTION [dbo].[ufnLeadingZeros_native](@Value int)
RETURNS varchar(8)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
DECLARE @ReturnValue varchar(8);
SET @ReturnValue = CONVERT(varchar(8), @Value);
DECLARE @i int = 0, @count int = 8 - LEN(@ReturnValue)
WHILE @i < @count
BEGIN
SET @ReturnValue = '0' + @ReturnValue;
SET @i += 1
END
RETURN (@ReturnValue);
END
Memanggil Fungsi yang Ditentukan Pengguna
Fungsi skalar yang ditentukan pengguna dan dikompilasi secara native dapat digunakan dalam ekspresi, di posisi yang sama seperti fungsi skalar bawaan dan fungsi skalar yang ditentukan pengguna yang diinterpretasikan. Fungsi skalar yang ditentukan pengguna yang dikompilasi secara native juga dapat digunakan dengan pernyataan EXECUTE, dalam pernyataan Transact-SQL, dan dalam prosedur tersimpan yang dikompilasi secara native.
Anda dapat menggunakan fungsi yang ditentukan pengguna skalar ini dalam prosedur penyimpanan yang dikompilasi secara asli dan fungsi yang ditentukan pengguna yang dikompilasi secara asli, dan di mana pun fungsi bawaan diizinkan. Anda juga dapat menggunakan fungsi skalar yang ditentukan pengguna dan dikompilasi secara native dalam modul Transact-SQL tradisional.
Anda dapat menggunakan fungsi skalar yang ditentukan pengguna ini dalam mode interop, di mana saja fungsi skalar yang ditentukan pengguna dan diinterpretasikan dapat digunakan. Penggunaan ini tunduk pada batasan transaksi lintas kontainer, sebagaimana dijelaskan dalam bagian Tingkat Isolasi yang Didukung untuk Transaksi Lintas Kontainer di Transaksi dengan Tabel yang Dioptimalkan untuk Memori. Untuk informasi selengkapnya tentang mode interop, lihat Mengakses Tabel yang Dioptimalkan untuk Memori Menggunakan Transact-SQL Terinterpretasi.
Fungsi skalar yang ditentukan pengguna dan dikompilasi secara native memang memerlukan konteks eksekusi yang eksplisit. Untuk informasi selengkapnya, lihat EXECUTE AS Klausul (Transact-SQL). EXECUTE AS PENELEPON tidak didukung. Untuk informasi selengkapnya, lihat EXECUTE (Transact-SQL).
Untuk sintaks yang didukung untuk pernyataan Transact-SQL Execute, untuk fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar, lihat EXECUTE (Transact-SQL). Untuk sintaks yang didukung untuk menjalankan fungsi yang ditentukan pengguna dalam prosedur tersimpan yang dikompilasi secara asli, lihat Fitur yang Didukung untuk Modul T-SQL yang Dikompilasi Secara Asli.
Petunjuk dan Parameter
Dukungan untuk petunjuk tabel, join, dan kueri di dalam fungsi skalar yang ditentukan pengguna dan dikompilasi secara native setara dengan dukungan untuk petunjuk ini pada prosedur tersimpan yang dikompilasi secara native. Seperti fungsi yang ditentukan pengguna skalar yang ditafsirkan, petunjuk kueri yang disertakan dengan kueri Transact-SQL yang mereferensikan fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar tidak memengaruhi rencana kueri untuk fungsi yang ditentukan pengguna ini.
Parameter yang didukung untuk fungsi skalar yang ditentukan pengguna dan dikompilasi secara native adalah semua parameter yang didukung untuk prosedur tersimpan yang dikompilasi secara native, selama parameter tersebut diizinkan untuk fungsi skalar yang ditentukan pengguna. Contoh parameter yang didukung adalah parameter bernilai tabel.
Terikat pada Skema
Berikut ini berlaku untuk fungsi skalar yang ditentukan pengguna dan dikompilasi secara native.
Harus terikat skema, dengan menggunakan argumen WITH SCHEMABINDING di CREATE FUNCTION dan ALTER FUNCTION.
Tidak dapat dihilangkan atau diubah saat direferensikan oleh prosedur tersimpan terikat skema atau fungsi yang ditentukan pengguna.
SHOWPLAN_XML
Fungsi skalar yang ditentukan pengguna dan dikompilasi secara native mendukung SHOWPLAN_XML. Ini sesuai dengan skema umum SHOWPLAN_XML , seperti halnya prosedur tersimpan yang dikompilasi secara asli. Elemen dasar untuk fungsi yang ditentukan pengguna adalah <UDF>.
STATISTICS XML tidak didukung untuk fungsi skalar yang ditentukan pengguna dan dikompilasi secara native. Saat Anda menjalankan kueri yang mereferensikan fungsi yang ditentukan pengguna, dengan STATISTICS XML diaktifkan, konten XML dikembalikan tanpa bagian untuk fungsi yang ditentukan pengguna.
Izin
Seperti halnya prosedur tersimpan yang dikompilasi secara native, izin untuk objek yang dirujuk oleh fungsi skalar yang ditentukan pengguna dan dikompilasi secara native diperiksa saat fungsi tersebut dibuat. CREATE FUNCTION gagal jika pengguna yang diimpersonasi tidak memiliki izin yang diperlukan. Jika perubahan izin mengakibatkan pengguna yang ditiru tidak lagi memiliki izin yang benar, eksekusi berikutnya dari fungsi yang ditentukan pengguna gagal.
Saat Anda menggunakan fungsi skalar yang ditentukan pengguna dan dikompilasi secara native di dalam prosedur tersimpan yang dikompilasi secara native, izin untuk menjalankan fungsi yang ditentukan pengguna tersebut diperiksa saat prosedur terluar dibuat. Jika pengguna yang ditiru oleh prosedur luar tidak memiliki izin EXEC untuk fungsi yang ditentukan pengguna, pembuatan prosedur tersimpan gagal. Jika perubahan izin mengakibatkan pengguna tidak lagi memiliki izin EXEC, eksekusi prosedur luar gagal.
Lihat Juga
Fungsi Bawaan (Transact-SQL)
Menyimpan Rencana Eksekusi dalam Format XML