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
Felügyelt Azure SQL-példány
SQL Analytics-végpont a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
A programozási nyelvek függvényeihez hasonlóan az SQL Server felhasználó által definiált függvényei olyan rutinok, amelyek paramétereket fogadnak el, végrehajtanak egy műveletet, például egy összetett számítást, és a művelet eredményét értékként adnak vissza. A visszatérési érték lehet egyetlen skaláris érték vagy eredményhalmaz.
A felhasználó által definiált függvények előnyei
Miért érdemes felhasználó által definiált függvényeket (UDF-eket) használni?
Moduláris programozás. A függvényt létrehozhatja egyszer, tárolhatja az adatbázisban, és tetszőleges számú alkalommal meghívhatja a programban. A felhasználó által definiált függvények a program forráskódtól függetlenül módosíthatók.
Gyorsabb végrehajtás. A tárolt eljárásokhoz hasonlóan a Transact-SQL felhasználó által definiált függvények csökkentik a Transact-SQL kód fordítási költségeit a tervek gyorsítótárazásával és azok ismételt végrehajtáshoz való használatával. Ez azt jelenti, hogy a felhasználó által definiált függvényt nem kell újra elemezni és újraoptimizálni minden egyes használattal, ami sokkal gyorsabb végrehajtási időt eredményez.
A közös nyelvi futtatókörnyezeti (CLR) függvények jelentős teljesítményelőnyt biztosítanak Transact-SQL függvényekkel szemben számítási feladatokhoz, sztringmanipulációhoz és üzleti logikához. Transact-SQL függvények jobban megfelelnek az adathozzáférés-igényes logikának.
Csökkentse a hálózati forgalmat. Egy olyan művelet, amely bizonyos összetett kényszer alapján szűri az adatokat, amelyeket nem lehet egyetlen skaláris kifejezésben kifejezni, függvényként fejezhető ki. A függvény ezután meghívható a WHERE záradékban az ügyfélnek küldött sorok számának csökkentése érdekében.
Fontos
Transact-SQL lekérdezésekben lévő UDF-ek csak egyetlen szálon (soros végrehajtási terven) hajthatók végre. Ezért az UDF-ek használata gátolja a párhuzamos lekérdezésfeldolgozást. A párhuzamos lekérdezésfeldolgozásról további információt a lekérdezésfeldolgozási architektúra útmutatójában talál.
A függvények típusai
Ez a szakasz a skaláris függvények, a táblaértékelt függvények és a rendszerfüggvények közötti különbségeket ismerteti.
Skaláris függvények
A felhasználó által definiált skaláris függvények a RETURNS záradékban meghatározott típus egyetlen adatértéket ad vissza. Beágyazott skaláris függvény esetén a visszaadott skaláris érték egyetlen utasítás eredménye. Többértékű skaláris függvények esetén a függvény törzse több Transact-SQL utasítást tartalmazhat, amelyek egyetlen értéket adnak vissza. A visszatérési típus bármilyen adattípus lehet, kivéve a szöveget, az ntextet, a képet, a kurzort és az időbélyeget. Példák: Felhasználó által definiált függvények (adatbázismotor) létrehozása.
Táblaértékelt függvények
A felhasználó által definiált táblaértékelt függvények (TVF-ek) táblaadattípust ad vissza. Beágyazott táblaértékű függvény esetén nincs függvény törzse; a tábla egyetlen SELECT utasítás eredményhalmaza. Példák: Felhasználó által definiált függvények (adatbázismotor) létrehozása.
Rendszer funkciók
Az SQL Server számos rendszerfüggvényt biztosít, amelyekkel különböző műveleteket hajthat végre. Nem módosíthatók. További információ: Mik az SQL-adatbázisfüggvények?, a System Functions kategória szerint a Transact-SQL-hez és a rendszer dinamikus felügyeleti nézetei.
Iránymutatások
Transact-SQL olyan hibák, amelyek egy utasítás visszavonását okozzák, és a modul következő utasításának folytatása (például eseményindítók vagy tárolt eljárások) másként lesznek kezelve egy függvényen belül. A függvényekben az ilyen hibák miatt a függvény végrehajtása leáll. Ez viszont a függvényt meghívó utasítás megszakítását eredményezi.
A blokkokban lévő BEGIN...END
utasításoknak nem lehetnek mellékhatásai. A függvény mellékhatásai az olyan erőforrások állapotának állandó változásai, amelyek hatóköre kívül esik a függvényen, például egy adatbázistábla módosítása. A függvényben lévő utasítások csak a függvény helyi objektumainak módosításait módosíthatják, például helyi kurzorokat vagy változókat. Az adatbázistáblák módosítása, a függvényben nem helyi kurzorokon végzett műveletek, e-mailek küldése, katalógusmódosítási kísérlet és a felhasználónak visszaadott eredményhalmaz létrehozása példák olyan műveletekre, amelyeket nem lehet végrehajtani egy függvényben.
Ha egy CREATE FUNCTION
utasítás olyan erőforrásokra okoz mellékhatásokat, amelyek nem léteznek az utasítás kiadásakor, az CREATE FUNCTION
SQL Server végrehajtja az utasítást. Az SQL Server azonban nem hajtja végre a függvényt a meghíváskor.
A lekérdezésben megadott függvények végrehajtásának száma az optimalizáló által létrehozott végrehajtási tervek között változhat. Példa erre egy függvény, amelyet egy WHERE
záradék al-lekérdezése hív meg. Az al-lekérdezés és a függvény végrehajtásának száma az optimalizáló által választott elérési utak különbözősége alapján változhat.
A determinisztikus függvények sémához kötöttnek kell lenniük. Determinisztikus függvény létrehozásakor használja a SCHEMABINDING
záradékot.
A felhasználó által definiált függvényekkel kapcsolatos további információkért és teljesítménybeli szempontokért lásd: Felhasználó által definiált függvények (adatbázismotor) létrehozása.
Érvényes utasítások egy függvényben
A függvényekben érvényes utasítások típusai a következők:
DECLARE
utasításokkal definiálhatók a függvényben helyi adatváltozók és kurzorok.Értékek hozzárendelése a függvényhez helyi objektumokhoz, például
SET
értékek hozzárendelése skaláris és táblázatos helyi változókhoz.A függvényben deklarált, megnyitott, bezárt és felszabadított helyi kurzorokra hivatkozó kurzorműveletek.
FETCH
nem engedélyezettek azok az utasítások, amelyek adatokat adnak vissza az ügyfélnek. CsakFETCH
olyan utasítások engedélyezettek, amelyek értékeket rendelnek a helyi változókhoz aINTO
záradék használatával.Vezérlési utasítások kivéve a
TRY...CATCH
utasításokat.SELECT
a függvényhez helyi változókhoz értékeket rendelő kifejezéseket tartalmazó listákat tartalmazó utasítások.UPDATE
,INSERT
ésDELETE
a függvényhez helyi táblázatváltozókat módosító utasítások.EXECUTE
kiterjesztett tárolt eljárást hívó utasítások.
Beépített rendszerfüggvények
A következő nemdeterminisztikus beépített függvények használhatók Transact-SQL felhasználó által definiált függvényekben.
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
A következő nemdeterminisztikus beépített függvények nem használhatók Transact-SQL felhasználó által definiált függvényekben.
NEWID
NEWSEQUENTIALID
RAND
TEXTPTR
A determinisztikus és nemdeterminista beépített rendszerfüggvények listáját lásd : Determinisztikus és nemdeterminista függvények.
Sémához kötött függvények
CREATE FUNCTION
támogatja azt SCHEMABINDING
a záradékot, amely a függvényt az általa hivatkozott objektumok sémáihoz, például táblákhoz, nézetekhez és más felhasználó által definiált függvényekhez köti. A sémakötött függvény által hivatkozott objektumok módosítására vagy elvetésére tett kísérlet meghiúsul.
Ezeket a feltételeket teljesíteni kell, mielőtt megadhatja SCHEMABINDING
a CREATE függvényt:
A függvény által hivatkozott összes nézetnek és felhasználó által megadott függvénynek sémához kötöttnek kell lennie.
A függvény által hivatkozott összes objektumnak ugyanabban az adatbázisban kell lennie, mint a függvénynek. Az objektumokra egy- vagy kétrészes névvel kell hivatkozni.
A függvényben hivatkozott összes objektumhoz (táblákhoz, nézetekhez és felhasználó által definiált függvényekhez) rendelkeznie kell
REFERENCES
engedéllyel.
A ALTER FUNCTION
sémakötést eltávolíthatja. Az ALTER FUNCTION
utasításnak újra kell definiálnia a függvényt anélkül, hogy meg kellene adnia a függvényt WITH SCHEMABINDING
.
Paraméterek megadása
A felhasználó által definiált függvények nulla vagy több bemeneti paramétert vesznek fel, és skaláris értéket vagy táblát ad vissza. Egy függvény legfeljebb 1024 bemeneti paraméterrel rendelkezhet. Ha a függvény egy paramétere alapértelmezett értékkel rendelkezik, a kulcsszót DEFAULT
meg kell adni, amikor meghívja a függvényt az alapértelmezett érték lekéréséhez. Ez a viselkedés eltér a felhasználó által definiált tárolt eljárások alapértelmezett értékeit tartalmazó paraméterektől, amelyekben a paraméter kihagyása az alapértelmezett értéket is jelenti. A felhasználó által definiált függvények nem támogatják a kimeneti paramétereket.
Kapcsolódó tartalom
- Felhasználó által definiált függvények (adatbázismotor) létrehozása
- CLR-függvények létrehozása
- Felhasználó által definiált összesítések létrehozása
- Felhasználó által definiált függvények módosítása
- Felhasználó által definiált függvények törlése
- Felhasználó által definiált függvények végrehajtása
- Felhasználó által definiált függvények átnevezése
- Felhasználó által definiált függvények megtekintése