Megosztás a következőn keresztül:


Skaláris felhasználó által meghatározott függvények memóriabeli OLTP-hez

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure 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 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