Fungsi Yang Ditentukan Pengguna Skalar untuk OLTP Dalam Memori
Berlaku untuk: SQL ServerAzure 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, skalar yang ditentukan pengguna, FUNGSI DROP 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 FUNGSI DROP untuk fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar sama dengan untuk fungsi yang ditentukan pengguna yang ditafsirkan.
Prosedur tersimpan sp_recompile (Transact-SQL) dapat digunakan dengan fungsi asli yang dikompilasi pengguna skalar. 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 yang ditentukan pengguna skalar yang dikompilasi secara asli dapat digunakan dalam ekspresi, di tempat yang sama dengan fungsi skalar bawaan dan fungsi skalar yang ditentukan pengguna. Fungsi yang ditentukan pengguna skalar yang dikompilasi secara asli juga dapat digunakan dengan pernyataan EXECUTE, dalam pernyataan Transact-SQL dan dalam prosedur tersimpan yang dikompilasi secara asli.
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 yang dikompilasi secara asli dan ditentukan pengguna skalar dalam modul Transact-SQL tradisional.
Anda dapat menggunakan fungsi yang ditentukan pengguna skalar ini dalam mode interop, di mana pun fungsi yang ditentukan pengguna skalar yang ditafsirkan dapat digunakan. Penggunaan ini tunduk pada batasan transaksi lintas kontainer, seperti yang dijelaskan di bagian Tingkat Isolasi yang Didukung untuk Transaksi Lintas Kontainer di Transaksi dengan Tabel yang Dioptimalkan Memori. Untuk informasi selengkapnya tentang mode interop, lihat Mengakses Tabel yang Dioptimalkan Memori Menggunakan Transact-SQL yang Ditafsirkan.
Fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar memerlukan konteks eksekusi eksplisit. Untuk informasi selengkapnya, lihat EXECUTE AS Clause (Transact-SQL). EXECUTE AS CALLER 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, gabungan, dan kueri di dalam fungsi yang dikompilasi secara asli, skalar yang ditentukan pengguna sama dengan dukungan untuk petunjuk ini untuk prosedur tersimpan yang dikompilasi secara asli. 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 yang dikompilasi secara asli dan ditentukan pengguna skalar adalah semua parameter yang didukung untuk prosedur tersimpan yang dikompilasi secara asli, selama parameter diizinkan untuk fungsi skalar yang ditentukan pengguna. Contoh parameter yang didukung adalah parameter bernilai tabel.
Terikat Skema
Berikut ini berlaku untuk fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar.
Harus terikat skema, dengan menggunakan argumen WITH SCHEMABINDING dalam FUNGSI CREATE dan ALTER FUNCTION.
Tidak dapat dihilangkan atau diubah saat direferensikan oleh prosedur tersimpan terikat skema atau fungsi yang ditentukan pengguna.
SHOWPLAN_XML
Fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar mendukung SHOWPLAN_XML. Ini sesuai dengan skema SHOWPLAN_XML umum, seperti prosedur tersimpan yang dikompilasi secara asli. Elemen dasar untuk fungsi yang ditentukan pengguna adalah <UDF>
.
STATISTICS XML tidak didukung untuk fungsi yang dikompilasi secara asli dan ditentukan pengguna skalar. Saat Anda menjalankan kueri yang mereferensikan fungsi yang ditentukan pengguna, dengan XML STATISTIK diaktifkan, konten XML dikembalikan tanpa bagian untuk fungsi yang ditentukan pengguna.
Izin
Seperti prosedur tersimpan yang dikompilasi secara asli, izin untuk objek yang direferensikan dari fungsi asli yang dikompilasi pengguna skalar diperiksa saat fungsi dibuat. FUNGSI CREATE gagal jika pengguna yang ditiru tidak memiliki izin yang benar. 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 yang dikompilasi secara asli dan ditentukan pengguna skalar di dalam prosedur tersimpan yang dikompilasi secara asli, izin untuk menjalankan fungsi yang ditentukan pengguna diperiksa saat prosedur luar 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