Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Az SQL Server 2016-ban (13.x) natívan lefordított, skaláris, felhasználó által definiált függvényeket hozhat létre és helyezhet el. Ezeket a felhasználó által definiált függvényeket is módosíthatja. A natív fordítás javítja a felhasználó által definiált függvények kiértékelésének teljesítményét a Transact-SQL-ben.
Ha módosít egy natívan lefordított, felhasználó által definiált skaláris függvényt, az alkalmazás a művelet futtatása és a függvény új verziójának fordítása közben is elérhető marad.
A támogatott T-SQL-szerkezetekért lásd a Natívan lefordított T-SQL-modulok támogatott funkcióit.
User-Defined függvények létrehozása, elvetése és módosítása
A CREATE függvény használatával hozza létre a natívan lefordított, skaláris felhasználó által definiált függvényt, a DROP függvényt a felhasználó által definiált függvény eltávolításához, az ALTER FÜGGVÉNYt pedig a függvény módosításához. A felhasználó által definiált függvényekhez a BEGIN ATOMIC WITH szükséges.
A támogatott szintaxissal és az esetleges korlátozásokkal kapcsolatos információkért tekintse meg az alábbi témaköröket.
-
A natívan lefordított, skaláris, felhasználó által definiált függvények DROP FÜGGVÉNY szintaxisa megegyezik a felhasználó által definiált értelmezett függvényekkel.
A sp_recompile (Transact-SQL) tárolt eljárás a natívan lefordított, skaláris, felhasználó által definiált függvénnyel használható. Ez azt eredményezi, hogy a függvény a metaadatokban található definícióval kerül újrafordításra.
Az alábbi minta egy skaláris UDF-t mutat be az AdventureWorks2022 mintaadatbázisból.
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
Felhasználó által meghatározott függvények hívása
Natívan lefordított skaláris felhasználói függvények kifejezésekben használhatók, ugyanabban a környezetben, mint a beépített skaláris függvények és az értelmezett skaláris felhasználói függvények. Natívan lefordított, felhasználó által definiált skaláris függvények is használhatók az EXECUTE utasítással, Transact-SQL utasításban és natívan lefordított tárolt eljárásban.
Ezeket a skaláris, felhasználó által definiált függvényeket natívan lefordított tárolási eljárásokban és natívan lefordított, felhasználó által definiált függvényekben használhatja, és ahol a beépített függvények engedélyezettek. A hagyományos Transact-SQL modulokban natívan lefordított, skaláris, felhasználó által definiált függvényeket is használhat.
Ezeket a skaláris, felhasználó által definiált függvényeket interop módban használhatja, ahol egy értelmezett skaláris felhasználó által definiált függvény használható. Ez a használat a tranzakciókra érvényes, tárolók közötti korlátozások alá tartozik, ahogyan az a Memória-optimalizált táblákkal rendelkező tranzakciók című részben található támogatott elkülönítési szintek szakaszában le van írva. További információért az interop módról, lásd: Memória-optimalizált táblák elérése Transact-SQL értelmezéssel.
A natívan lefordított, felhasználó által definiált skaláris függvények explicit végrehajtási környezetet igényelnek. További információ: „EXECUTE AS” záradék (Transact-SQL). AZ EXECUTE AS CALLER nem támogatott. További információ: EXECUTE (Transact-SQL).
A Transact-SQL Végrehajtási utasítások, natívan lefordított, skaláris, felhasználó által definiált függvények támogatott szintaxisát lásd: EXECUTE (Transact-SQL). A felhasználó által definiált függvények natívan lefordított tárolt eljárásban való végrehajtásának támogatott szintaxisát a Natívan lefordított T-SQL-modulok támogatott szolgáltatásai című témakörben talál.
Tippek és paraméterek
A natívan lefordított, skaláris, felhasználó által definiált függvényeken belüli táblázat-, illesztési és lekérdezési tippek támogatása egyenlő a natívan lefordított tárolt eljárásokra vonatkozó tippekkel. Az értelmezett skaláris felhasználó által definiált függvényekhez hasonlóan a natívan lefordított, skaláris, felhasználó által definiált függvényre hivatkozó Transact-SQL lekérdezési tippek sem befolyásolják a felhasználó által definiált függvény lekérdezési tervét.
A natívan fordított, skaláris felhasználói függvényekhez engedélyezett paraméterek megegyeznek a natívan fordított tárolt eljárások számára támogatott paraméterekkel, feltéve, hogy ezek a paraméterek megengedettek a skaláris felhasználói függvényeknél. Egy támogatott paraméterre példa a táblaértékkel rendelkező paraméter.
Sémához kötött
Az alábbiak a natívan lefordított, skaláris, felhasználó által definiált függvényekre vonatkoznak.
Sémához kell kötni, a CREATE FUNCTION és az ALTER FUNCTION parancsokban a WITH SCHEMABINDING argumentum használatával.
Sémaalapú tárolt eljárás vagy felhasználó által definiált függvény hivatkozása esetén nem lehet elvetni vagy módosítani.
SHOWPLAN_XML
Natívan lefordított, felhasználó által definiált skaláris függvények támogatják a SHOWPLAN_XML. Megfelel az általános SHOWPLAN_XML sémának, hasonlóan a nativ módon lefordított tárolt eljárásokhoz. A felhasználó által definiált függvények alapeleme a .<UDF>
A STATISTICS XML nem támogatott natívan lefordított, skaláris, felhasználó által definiált függvényekhez. Ha a felhasználó által definiált függvényre hivatkozó lekérdezést futtat, és a STATISTICS XML engedélyezve van, a rendszer a felhasználó által definiált függvény része nélkül adja vissza az XML-tartalmat.
Permissions
A natívan lefordított tárolt eljárásokhoz hasonlóan a natívan lefordított, skaláris felhasználó által definiált függvényekből hivatkozott objektumok engedélyeit is ellenőrzi a rendszer a függvény létrehozásakor. A CREATE függvény meghiúsul, ha a megszemélyesített felhasználó nem rendelkezik a megfelelő engedélyekkel. Ha az engedélymódosítások azt eredményezik, hogy a megszemélyesített felhasználó már nem rendelkezik a megfelelő engedélyekkel, a felhasználó által megadott függvény későbbi végrehajtása sikertelen lesz.
Ha natívan lefordított, skaláris, felhasználó által definiált függvényt használ egy natívan lefordított tárolt eljárásban, a külső eljárás létrehozásakor a rendszer ellenőrzi a felhasználó által definiált függvény végrehajtásának engedélyeit. Ha a külső eljárás által megszemélyesített felhasználó nem rendelkezik EXEC-engedélyekkel a felhasználó által definiált függvényhez, a tárolt eljárás létrehozása meghiúsul. Ha az engedélymódosítások azt eredményezik, hogy a felhasználó már nem rendelkezik EXEC-engedélyekkel, a külső eljárás végrehajtása meghiúsul.
Lásd még:
Beépített függvények (Transact-SQL)
Végrehajtási terv mentése XML formátumban