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őre vonatkozik:SQL Analytics-végpont és Warehouse a Microsoft Fabricben
CREATE FUNCTION beágyazott tábla-érték függvényeket és skaláris függvényeket hozhat létre.
Megjegyzés:
A skaláris UDF-ek a Fabric Data Warehouse előzetes verziójának funkciói.
Fontos
A Fabric Data Warehouse-ban a skaláris UDF-eknek beágyazottnak kell lenniük a felhasználói táblák lekérdezéseihez SELECT ... FROM , de továbbra is létrehozhat olyan függvényeket, amelyek nem beágyazottak. A nem beágyazott Skaláris UDF-ek korlátozott számú forgatókönyvben működnek. Ellenőrizheti , hogy egy UDF beágyazott-e.
A felhasználó által definiált függvények olyan Transact-SQL 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 adják vissza. A skaláris függvények skaláris értéket adnak vissza, például számot vagy sztringet. A felhasználó által definiált táblaértékű függvények (TVF-ek) egy táblát ad vissza.
A következő módokon használható újrafelhasználható T-SQL-rutin létrehozásához használható CREATE FUNCTION :
- Az olyan Transact-SQL kijelentésekben, mint például
SELECT - Transact-SQL adatmanipulációs utasításokban (DML), például
UPDATE: ,INSERTésDELETE - Függvényt hívó alkalmazásokban
- Egy másik felhasználó által definiált függvény definíciójában
- Tárolt eljárás cseréje
Jótanács
Megadhatja CREATE OR ALTER FUNCTION , hogy egy új függvényt hozzon létre, ha az adott név nem létezik, vagy egy meglévő függvényt módosít egyetlen utasításban.
Transact-SQL szintaxis konvenciók
Szemantika
Skaláris függvény szintaxisa
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
<function_option>::=
{
[ SCHEMABINDING ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
}
Beágyazott táblaértékű függvény szintaxisa
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH SCHEMABINDING ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
Érvek
schema_name
Annak a sémának a neve, amelyhez a felhasználó által definiált függvény tartozik.
function_name
A felhasználó által definiált függvény neve. A függvényneveknek meg kell felelniük az azonosítókra vonatkozó szabályoknak, és egyedinek kell lenniük az adatbázisban és a sémában.
Megjegyzés:
Zárójelek szükségesek a függvény neve után akkor is, ha nincs megadva paraméter.
@ parameter_name
A felhasználó által definiált függvény paramétere. Egy vagy több paraméter deklarálható.
Egy függvény legfeljebb 2 100 paraméterrel rendelkezhet. Az egyes deklarált paraméterek értékét a felhasználónak kell megadnia a függvény végrehajtásakor, kivéve, ha a paraméter alapértelmezett értéke van megadva.
Adjon meg egy paraméternevet úgy, hogy első karakterként egy at sign (@) karaktert használ. A paraméter nevének meg kell felelnie az azonosítókra vonatkozó szabályoknak. A paraméterek a függvényhez kapcsolódnak; Ugyanezek a paraméternevek más függvényekben is használhatók. A paraméterek csak állandók helyét vehetik át; nem használhatók táblanevek, oszlopnevek vagy más adatbázis-objektumok nevei helyett.
Megjegyzés:
ANSI_WARNINGS a rendszer nem tartja tiszteletben, ha paramétereket ad át egy tárolt eljárásban, felhasználó által definiált függvényben, vagy ha változókat deklarál és állít be egy batch utasításban. Ha például egy változó karakter(3) értékként van definiálva, majd három karakternél nagyobb értékre van állítva, az adatok csonkulnak a megadott méretre, és az INSERT vagy AZ UPDATE utasítás sikeres lesz.
parameter_data_type
A paraméter adattípusa. Transact-SQL függvények esetében minden támogatott skaláris adattípus engedélyezett.
[ = alapértelmezett ]
A paraméter alapértelmezett értéke. Ha alapértelmezett érték van megadva, a függvény a paraméter értékének megadása nélkül is végrehajtható.
Ha a függvény egyik paramétere alapértelmezett értékkel rendelkezik, a kulcsszót DEFAULT meg kell adni, amikor a függvényt meghívja az alapértelmezett érték lekéréséhez. Ez a viselkedés eltér az alapértelmezett értékekkel rendelkező paraméterek tárolt eljárásokban való használatától, amelyekben a paraméter kihagyása az alapértelmezett értéket is magában foglalja.
return_data_type
Egy skaláris, felhasználó által definiált függvény visszatérési értéke.
A Fabric Data Warehouse függvényei esetében minden adattípus engedélyezett, kivéve a sorfordítási/időbélyeget. A táblához hasonló nem skálázási típusok nem engedélyezettek.
function_body
Transact-SQL utasítások sorozata.
A skaláris függvényekben a function_body Transact-SQL utasítások sorozata, amelyek együttesen skaláris értékre értékelnek, amelyek a következők lehetnek:
- Egyutas kifejezés
- Többutas kifejezések (
IF/THEN/ELSEésBEGIN/ENDblokkok) - Helyi változók
- Elérhető beépített SQL-függvények hívása
- Hívások más UDF-ekhez
-
SELECTutasítások, valamint táblákra, nézetekre és beágyazott táblázatértékelt függvényekre mutató hivatkozások
scalar_expression
Megadja a skaláris függvény által visszaadott skaláris értéket.
select_stmt
SELECT Egyetlen utasítás, amely egy beágyazott táblaértékű függvény visszatérési értékét határozza meg. Beágyazott táblaértékű függvény esetén nincs függvénytörzs; a tábla egyetlen SELECT utasítás eredményhalmaza.
ASZTAL
Megadja, hogy a táblaértékű függvény (TVF) visszatérési értéke tábla. Csak az állandók és a @local_variables adhatók át a TVF-eknek.
A beágyazott TVF-ek (előzetes verzió) esetében a TABLE visszatérési értéke egyetlen SELECT utasítással van definiálva. A beágyazott függvények nem rendelkeznek társított visszatérési változókkal.
<function_option>
A Fabric Data Warehouse-ban a INLINE, ENCRYPTIONés EXECUTE AS a kulcsszavak nem támogatottak.
A támogatott függvénybeállítások a következők:
SÉMAKÖTÉS
Megadja, hogy a függvény az általa hivatkozott adatbázis-objektumokhoz legyen kötve. A SCHEMABINDING megadásakor az alapobjektumok nem módosíthatók olyan módon, amely hatással lenne a függvénydefinícióra. Magát a függvénydefiníciót először módosítani kell vagy el kell dobni, hogy eltávolítsa a módosítani kívánt objektumtól való függőségeket.
A függvény hivatkozási objektumokhoz való kötése csak akkor törlődik, ha az alábbi műveletek valamelyike történik:
A funkció megszűnik.
A függvény módosítása az ALTER utasítással történik, és nincs megadva a SCHEMABINDING beállítás.
Egy függvény csak akkor lehet sémakötésű, ha az alábbi feltételek teljesülnek:
A függvény által hivatkozott felhasználó által definiált függvények szintén sémaalapúak.
A függvény által hivatkozott objektumokra kétrészes névvel hivatkoznak.
Csak az ugyanabban az adatbázisban lévő beépített függvényekre és más UDF-ekre lehet hivatkozni az UDF-ek törzsében.
Az utasítást
CREATE FUNCTIONvégrehajtó felhasználó hivatkozási engedéllyel rendelkezik azon adatbázis-objektumokon, amelyekre a függvény hivatkozik.
A SCHEMABINDING eltávolításához használja a következőt ALTER: .
NULL ÉRTÉKET AD VISSZA NULL ÉRTÉKEN | NULL ÉRTÉKŰ BEMENET MEGHÍVÁSA
OnNULLCall Egy skaláris értékű függvény attribútumát adja meg. Ha nincs megadva, CALLED ON NULL INPUT alapértelmezés szerint implicit, és a függvény törzse akkor is végrehajtja, ha NULL argumentumként ad át.
Ajánlott eljárások
Ha a felhasználó által definiált függvény nem sémakötéssel jön létre, a mögöttes objektumokon végrehajtott módosítások hatással lehetnek a függvény definíciójára, és váratlan eredményeket eredményezhetnek a meghíváskor. A függvény létrehozásakor ajánlott megadni a
WITH SCHEMABINDINGzáradékot. Ez biztosítja, hogy a függvénydefinícióban hivatkozott objektumok csak akkor módosíthatók, ha a függvény is módosul.A felhasználó által definiált függvények írása beágyazottként. További információ: Skaláris UDF-beillesztés.
Interoperabilitás
Beágyazott táblaértékű, felhasználó által definiált függvények
Beágyazott táblaértékű függvényekben csak egyetlen kijelölési utasítás engedélyezett.
Felhasználó által definiált skaláris függvények
A következő utasítások érvényesek egy skaláris értékű függvényben:
- Hozzárendelési utasítások
- Folyamatvezérlési utasítások a utasítások kivételével
TRY...CATCH -
DECLAREhelyi adatváltozókat meghatározó utasítások
A skaláris értékű függvények törzse nem támogatja a következő beépített függvényeket:
A skaláris UDF-ek nem használhatók felhasználói táblák lekérdezéseiben
SELECT ... FROM, ha:- Az UDF-törzs egy nemdeterminista beépített függvény meghívását tartalmazza, lásd : Determinisztikus és nemdeterminista függvények.
- Az UDF-törzs egy közös táblakifejezést (CTE) tartalmaz.
- Az UDF-törzs hat
IF-THEN-ELSEblokkon túl több utasítású UDF-törzset tartalmaz. - Az UDF törzse EGY WHILE LOOP-t tartalmaz
- Az UDF-törzs más okok miatt nem ágyazható be. További információ: Skaláris UDF-formázási követelmények.
A skaláris UDF-ek nem használhatók lekérdezésekben, ha a következő:
- Az UDF közvetlenül egy
GROUP BYzáradékban van meghívva. - Az UDF közvetlenül egy
ORDER BYzáradékban van meghívva. - A hívó lekérdezésnek van egy közös táblakifejezése (CTE).
- Az UDF közvetlenül egy
A rekurzív skaláris UDF-ek nem támogatottak.
A felhasználói lekérdezések meghiúsulhatnak, ha egyetlen lekérdezésben több mint 10 UDF-hívás történik.
Bizonyos peremhálózati esetekben a felhasználói lekérdezés és az UDF törzsének összetettsége megakadályozza a beágyazottságot, ebben az esetben a skaláris UDF nem beágyazott, és a felhasználói lekérdezés meghiúsul.
Ha skaláris UDF-et használnak bármilyen nem támogatott forgatókönyvben, a következő hibaüzenet jelenik meg: "
Scalar UDF execution is currently unavailable in this context."
Korlátozások
Megjegyzés:
Az aktuális előzetes verzióban a korlátozások változhatnak.
A felhasználó által definiált függvények nem használhatók az adatbázis állapotát módosító műveletek végrehajtására.
A felhasználó által definiált függvények beágyazhatók; vagyis egy felhasználó által definiált függvény meghívhat egy másikat. A beágyazási szint növekszik, amikor a hívott függvény elkezdi a végrehajtást, és csökken, amikor a hívott függvény befejezi a végrehajtást. A Fabric Data Warehouse felhasználó által definiált függvényei legfeljebb négy szintre ágyazhatók be, ha egy UDF-törzs tábla-,nézet-/sorközi táblaértékfüggvényre hivatkozik, ellenkező esetben pedig legfeljebb 32 szintre. Ha túllépi a beágyazás maximális szintjét, a hívó függvénylánc meghiúsul.
Metadaták
Ez a szakasz felsorolja azokat a rendszerkatalógus-nézeteket, amelyekkel metaadatokat adhat vissza a felhasználó által definiált függvényekről.
sys.sql_modules: Megjeleníti Transact-SQL felhasználó által definiált függvények definícióját. Például:
SELECT definition, type FROM sys.sql_modules AS m JOIN sys.objects AS o ON m.object_id = o.object_id AND type = ('FN');sys.parameters: A felhasználó által definiált függvényekben definiált paraméterekkel kapcsolatos információkat jeleníti meg.
sys.sql_expression_dependencies: Megjeleníti a függvény által hivatkozott mögöttes objektumokat.
Engedélyek
A Háló munkaterület rendszergazdája, a Tag és a Közreműködő szerepkör tagjai függvényeket hozhatnak létre.
Skaláris felhasználói függvény befűzése
A Microsoft Fabric Data Warehouse skaláris UDF-fordítással állítja össze és hajtja végre a felhasználó által definiált kódot elosztott módon. A skaláris UDF-inlining alapértelmezés szerint engedélyezve van.
Bár a skaláris UDF-vázlatolás a Microsoft SQL Server 2019-ben (15.0) először bevezetett teljesítményoptimalizálási technika, a Fabric Data Warehouse-ban ez határozza meg a támogatott forgatókönyveket. A Fabric Data Warehouse-ban a skaláris UDF-ek automatikusan skaláris kifejezésekké vagy skaláris alquerykké alakulnak, amelyeket a hívó lekérdezés helyettesít az UDF-operátor helyett.
Egyes T-SQL-szintaxisok miatt a skaláris UDF nem olvasható. A hurkot WHILE , több RETURN utasítást vagy nemdeterminista SQL beépített függvényre (például GETUTCDATE() vagy GETDATE()) irányuló hívást tartalmazó függvények nem ágyazhatók be. További információ: Skaláris UDF-formázási követelmények.
Ellenőrizze, hogy a skaláris UDF beágyazott-e
A sys.sql_modules katalógusnézet tartalmazza az oszlopot is_inlineable, amely jelzi, hogy egy UDF beágyazott-e.
A is_inlineable tulajdonság a szintaxis UDF-definíción belüli ellenőrzéséből származik. A skaláris UDF nincs beágyazva a fordítási idő előtt. Az érték 1 azt jelzi, hogy az UDF beágyazott, míg egy érték 0 azt jelzi, hogy nem beágyazott. Ha egy skaláris UDF beágyazott, nem garantálja, hogy a lekérdezés fordításakor mindig beágyazott lesz.
A Fabric Data Warehouse az általános lekérdezések összetettségétől függően (lekérdezésenként) dönti el, hogy beágyazott-e egy UDF-et.
Az alábbi minta lekérdezéssel ellenőrizheti, hogy egy skaláris UDF beágyazott-e:
SELECT
SCHEMA_NAME(b.schema_id) as function_schema_name,
b.name as function_name,
b.type_desc as function_type,
a.is_inlineable
FROM sys.sql_modules AS a
INNER JOIN sys.objects AS b
ON a.object_id = b.object_id
WHERE b.type IN ('FN');
Ha egy skaláris függvény nem beágyazott sys.sql_modules.is_inlineable, akkor is végrehajthatja a lekérdezést önálló hívásként, például egy változó beállításához. A skaláris függvény azonban nem lehet része egy SELECT ... FROM felhasználói tábla lekérdezésének. Például:
CREATE FUNCTION [dbo].[custom_SYSUTCDATETIME]()
RETURNS datetime2(6)
AS
BEGIN
RETURN SYSUTCDATETIME();
END
A mintául dbo.custom_SYSUTCDATETIME szolgáló skaláris felhasználó által definiált függvény nem beágyazott, mert nem meghatározó rendszerfüggvényt használ. SYSUTCDATETIME() Sikertelen lesz, ha egy SELECT ... FROM felhasználói táblán lévő lekérdezésben használják, de önálló hívásként sikeres lesz, például:
DECLARE @utcdate datetime2(7);
SET @utcdate = dbo.custom_SYSUTCDATETIME();
SELECT @utcdate as 'utc_date';
Példák
Egy. Beágyazott táblaértékű függvény létrehozása
Az alábbi példa egy beágyazott táblaértékű függvényt hoz létre, amely visszaad néhány fontos információt a modulokról, a objectType paraméter alapján szűrve. Ez egy alapértelmezett értéket tartalmaz, amely az összes modult visszaadja, amikor a függvényt meghívják a DEFAULT paraméterrel. Ez a példa a metaadatokban említett rendszerkatalógus-nézetek némelyikét használja.
CREATE FUNCTION dbo.ModulesByType (@objectType CHAR(2) = '%%')
RETURNS TABLE
AS
RETURN (
SELECT sm.object_id AS 'Object Id',
o.create_date AS 'Date Created',
OBJECT_NAME(sm.object_id) AS 'Name',
o.type AS 'Type',
o.type_desc AS 'Type Description',
sm.DEFINITION AS 'Module Description',
sm.is_inlineable AS 'Inlineable'
FROM sys.sql_modules AS sm
INNER JOIN sys.objects AS o ON sm.object_id = o.object_id
WHERE o.type LIKE '%' + @objectType + '%'
);
GO
A függvény ezután meghívható az összes beágyazott táblaértékű függvény (IF) visszaadásához a következőkkel:
SELECT * FROM dbo.ModulesByType('IF'); -- SQL_INLINE_TABLE_VALUED_FUNCTION
Vagy keresse meg az összes skaláris függvényt (FN):
SELECT * FROM dbo.ModulesByType('FN'); -- SQL_SCALAR_FUNCTION
B. Beágyazott táblaértékű függvény eredményeinek kombinálása
Ez az egyszerű példa a korábban létrehozott beágyazott TVF-et használja annak bemutatására, hogy eredményei hogyan kombinálhatók más táblákkal kereszt alkalmazva. Itt kiválasztjuk az összes oszlopot mindkét sys.objects oszlopból, és az oszlopon ModulesByType lévő összes sor eredményéttype. További információ az alkalmazás használatáról: FROM záradék plusz JOIN, APPLY, PIVOT (Transact-SQL).
SELECT *
FROM sys.objects AS o
CROSS APPLY dbo.ModulesByType(o.type);
GO
C. Skaláris UDF-függvény létrehozása
Az alábbi példa egy beágyazott skaláris UDF-t hoz létre, amely maszkol egy bemeneti szöveget.
CREATE OR ALTER FUNCTION [dbo].[cleanInput] (@InputString VARCHAR(100))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @Result VARCHAR(50)
DECLARE @CleanedInput VARCHAR(50)
-- Trim whitespace
SET @CleanedInput = LTRIM(RTRIM(@InputString))
-- Handle empty or null input
IF @CleanedInput = '' OR @CleanedInput IS NULL
BEGIN
SET @Result = ''
END
ELSE IF LEN(@CleanedInput) <= 2
BEGIN
-- If string length is 1 or 2, just return the cleaned string
SET @Result = @CleanedInput
END
ELSE
BEGIN
-- Construct the masked string
SET @Result =
LEFT(@CleanedInput, 1) +
REPLICATE('*', LEN(@CleanedInput) - 2) +
RIGHT(@CleanedInput, 1)
END
RETURN @Result
END
A függvényt a következőképpen hívhatja meg:
DECLARE @input varchar(100) = '123456789'
SELECT dbo.cleanInput (@input) AS function_output;
További példák a skaláris UDF-ek használatára a Fabric Data Warehouse-ban:
Egy utasításban SELECT :
SELECT TOP 10
t.id, t.name,
dbo.cleanInput (t.name) AS function_output
FROM dbo.MyTable AS t;
WHERE Egy záradékban:
SELECT t.id, t.name, dbo.cleanInput(t.name) AS function_output
FROM dbo.MyTable AS t
WHERE dbo.cleanInput(t.name)='myvalue'
JOIN Egy záradékban:
SELECT t1.id, t1.name,
dbo.cleanInput (t1.name) AS function_output,
dbo.cleanInput (t2.name) AS function_output_2
FROM dbo.MyTable1 AS t1
INNER JOIN dbo.MyTable2 AS t2
ON dbo.cleanInput(t1.name)=dbo.cleanInput(t2.name);
ORDER BY Egy záradékban:
SELECT t.id, t.name, dbo.cleanInput (t.name) AS function_output
FROM dbo.MyTable AS t
ORDER BY function_output;
Az adatmanipulációs nyelv (DML) olyan utasításaiban, mint a INSERT, UPDATEvagy DELETE:
SELECT t.id, t.name, dbo.cleanInput (t.name) AS function_output
INTO dbo.MyTable_new
FROM dbo.MyTable AS t;
UPDATE t
SET t.mycolumn_new = dbo.cleanInput (t.name)
FROM dbo.MyTable AS t;
DELETE t
FROM dbo.MyTable AS t
WHERE dbo.cleanInput (t.name) ='myvalue';
Kapcsolódó tartalom
A következőkre vonatkozik:Azure Synapse Analytics
Analytics Platform System (PDW)
Létrehoz egy felhasználó által definiált függvényt (UDF) az Azure Synapse Analytics vagy az Analytics Platform System (PDW) rendszerben. A felhasználó által definiált függvények olyan Transact-SQL 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 adják vissza. A felhasználó által definiált táblaértékelt függvények (TVF-ek) táblaadattípust ad vissza.
Jótanács
A Fabric Data Warehouse szintaxisáért lásd a CREATE FUNCTION for Fabric Data Warehouse verzióját.
Az Analytics Platform Systemben (PDW) a visszatérési értéknek skaláris (egyetlen) értéknek kell lennie.
Az Azure Synapse Analyticsben
CREATE FUNCTIONa beágyazott táblaértékű függvények szintaxisával (előzetes verzió) adhat vissza egy táblát, vagy egyetlen értéket adhat vissza a skaláris függvények szintaxisával.Az Azure Synapse Analytics kiszolgáló nélküli SQL-készleteiben beágyazott táblaértékfüggvényeket hozhat létre,
CREATE FUNCTIONskaláris függvényeket azonban nem.Ezzel az utasítással hozhat létre egy újrafelhasználható rutint, amely a következő módokon használható:
Az olyan Transact-SQL kijelentésekben, mint például
SELECTFüggvényt hívó alkalmazásokban
Egy másik felhasználó által definiált függvény definíciójában
CHECK korlátozás definiálása egy oszlopon
Tárolt eljárás cseréje
Beágyazott függvény használata biztonsági házirend szűrőpredikátumaként
Transact-SQL szintaxis konvenciók
Szemantika
Skaláris függvény szintaxisa
-- Transact-SQL Scalar Function Syntax (in dedicated pools in Azure Synapse Analytics and Parallel Data Warehouse)
-- Not available in the serverless SQL pools in Azure Synapse Analytics
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
<function_option>::=
{
[ SCHEMABINDING ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
}
Beágyazott táblaértékű függvény szintaxisa
-- Transact-SQL Inline Table-Valued Function Syntax
-- Preview in dedicated SQL pools in Azure Synapse Analytics
-- Available in the serverless SQL pools in Azure Synapse Analytics
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH SCHEMABINDING ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
Érvek
schema_name
Annak a sémának a neve, amelyhez a felhasználó által definiált függvény tartozik.
function_name
A felhasználó által definiált függvény neve. A függvényneveknek meg kell felelniük az azonosítókra vonatkozó szabályoknak, és egyedinek kell lenniük az adatbázisban és a sémában.
Megjegyzés:
Zárójelek szükségesek a függvény neve után akkor is, ha nincs megadva paraméter.
@ parameter_name
A felhasználó által definiált függvény paramétere. Egy vagy több paraméter deklarálható.
Egy függvény legfeljebb 2 100 paraméterrel rendelkezhet. Az egyes deklarált paraméterek értékét a felhasználónak kell megadnia a függvény végrehajtásakor, kivéve, ha a paraméter alapértelmezett értéke van megadva.
Adjon meg egy paraméternevet úgy, hogy első karakterként egy at sign (@) karaktert használ. A paraméter nevének meg kell felelnie az azonosítókra vonatkozó szabályoknak. A paraméterek a függvényhez kapcsolódnak; Ugyanezek a paraméternevek más függvényekben is használhatók. A paraméterek csak állandók helyét vehetik át; nem használhatók táblanevek, oszlopnevek vagy más adatbázis-objektumok nevei helyett.
Megjegyzés:
ANSI_WARNINGS a rendszer nem tartja tiszteletben, ha paramétereket ad át egy tárolt eljárásban, felhasználó által definiált függvényben, vagy ha változókat deklarál és állít be egy batch utasításban. Ha például egy változó karakter(3) értékként van definiálva, majd három karakternél nagyobb értékre van állítva, az adatok csonkulnak a megadott méretre, és az INSERT vagy AZ UPDATE utasítás sikeres lesz.
parameter_data_type
A paraméter adattípusa. Transact-SQL függvények esetében az Azure Synapse Analyticsben támogatott összes skaláris adattípus engedélyezett. Az időbélyeg (rowversion) adattípus nem támogatott típus.
[ = alapértelmezett ]
A paraméter alapértelmezett értéke. Ha alapértelmezett érték van megadva, a függvény a paraméter értékének megadása nélkül is végrehajtható.
Ha a függvény egyik paramétere alapértelmezett értékkel rendelkezik, az ALAPÉRTELMEZETT kulcsszót meg kell adni, amikor a függvényt meghívják az alapértelmezett érték lekéréséhez. Ez a viselkedés eltér az alapértelmezett értékekkel rendelkező paraméterek tárolt eljárásokban való használatától, amelyekben a paraméter kihagyása az alapértelmezett értéket is magában foglalja.
return_data_type
Egy skaláris, felhasználó által definiált függvény visszatérési értéke. Transact-SQL függvények esetében az Azure Synapse Analyticsben támogatott összes skaláris adattípus engedélyezett. A rowversion/időbélyeg adattípusa nem támogatott típus. A kurzor és a táblázat nem skálázható típusai nem engedélyezettek.
function_body
Transact-SQL utasítások sorozata. A function_body nem tartalmazhat utasítást SELECT , és nem hivatkozhat adatbázisadatokra. A function_body nem hivatkozhat táblákra vagy nézetekre. A függvény törzse meghívhat más determinisztikus függvényeket, de nem hívhat nemdeterminista függvényeket.
A skaláris függvényekben a function_body Transact-SQL utasítások sorozata, amelyek együttesen egy skaláris értéket értékelnek ki.
scalar_expression
Megadja a skaláris függvény által visszaadott skaláris értéket.
select_stmt
SELECT Egyetlen utasítás, amely egy beágyazott táblaértékű függvény visszatérési értékét határozza meg. Beágyazott táblaértékű függvény esetén nincs függvénytörzs; a tábla egyetlen SELECT utasítás eredményhalmaza.
ASZTAL
Megadja, hogy a táblaértékű függvény (TVF) visszatérési értéke tábla. Csak az állandók és a @local_variables adhatók át a TVF-eknek.
A beágyazott TVF-ek (előzetes verzió) esetében a TABLE visszatérési értéke egyetlen SELECT utasítással van definiálva. A beágyazott függvények nem rendelkeznek társított visszatérési változókkal.
<function_option>
Megadja, hogy a függvény az alábbi lehetőségek közül egyet vagy többet tartalmazzon.
SÉMAKÖTÉS
Megadja, hogy a függvény az általa hivatkozott adatbázis-objektumokhoz legyen kötve. A SCHEMABINDING megadásakor az alapobjektumok nem módosíthatók olyan módon, amely hatással lenne a függvénydefinícióra. Magát a függvénydefiníciót először módosítani kell vagy el kell dobni, hogy eltávolítsa a módosítani kívánt objektumtól való függőségeket.
A függvény hivatkozási objektumokhoz való kötése csak akkor törlődik, ha az alábbi műveletek valamelyike történik:
A funkció megszűnik.
A függvény módosítása az ALTER utasítással történik, és nincs megadva a SCHEMABINDING beállítás.
Egy függvény csak akkor lehet sémakötésű, ha az alábbi feltételek teljesülnek:
A függvény által hivatkozott felhasználó által definiált függvények szintén sémaalapúak.
A függvény által hivatkozott függvényekre és egyéb UDF-ekre egy vagy kétrészes névvel hivatkozunk.
Csak az ugyanabban az adatbázisban lévő beépített függvényekre és más UDF-ekre lehet hivatkozni az UDF-ek törzsében.
Az utasítást
CREATE FUNCTIONvégrehajtó felhasználó hivatkozási engedéllyel rendelkezik azon adatbázis-objektumokon, amelyekre a függvény hivatkozik.
A SCHEMABINDING eltávolításához használja a következőt ALTER: .
NULL ÉRTÉKET AD VISSZA NULL ÉRTÉKEN | NULL ÉRTÉKŰ BEMENET MEGHÍVÁSA
OnNULLCall Egy skaláris értékű függvény attribútumát adja meg. Ha nincs megadva, CALLED ON NULL INPUT alapértelmezés szerint implicit, és a függvény törzse akkor is végrehajtja, ha NULL argumentumként ad át.
Ajánlott eljárások
Ha egy felhasználó által definiált függvény nem a SCHEMABINDING záradékkal jön létre, a mögöttes objektumokon végrehajtott módosítások hatással lehetnek a függvény definíciójára, és váratlan eredményeket hozhatnak a meghíváskor. A függvény létrehozásakor ajánlott megadni a WITH SCHEMABINDING záradékot. Ez biztosítja, hogy a függvénydefinícióban hivatkozott objektumok csak akkor módosíthatók, ha a függvény is módosul.
Interoperabilitás
A következő utasítások érvényesek egy skaláris értékű függvényben:
Hozzárendelési utasítások.
Folyamatvezérlési utasítások a TRY kivételével... CATCH utasítások.
A helyi adatváltozókat meghatározó DEKLARÁLÁSi utasítások.
Beágyazott táblaértékű függvényben (előzetes verzió) csak egyetlen kijelölési utasítás engedélyezett.
Korlátozások
A felhasználó által definiált függvények nem használhatók az adatbázis állapotát módosító műveletek végrehajtására.
A felhasználó által definiált függvények beágyazhatók; vagyis egy felhasználó által definiált függvény meghívhat egy másikat. A beágyazási szint növekszik, amikor a hívott függvény elkezdi a végrehajtást, és csökken, amikor a hívott függvény befejezi a végrehajtást. Ha túllépi a beágyazás maximális szintjét, a teljes hívófüggvénylánc meghiúsul.
A kiszolgáló nélküli SQL-készlet adatbázisában nem hozhatók létre objektumok, beleértve a master függvényeket is az Azure Synapse Analyticsben.
Metadaták
Ez a szakasz felsorolja azokat a rendszerkatalógus-nézeteket, amelyekkel metaadatokat adhat vissza a felhasználó által definiált függvényekről.
sys.sql_modules: Megjeleníti Transact-SQL felhasználó által definiált függvények definícióját. Például:
SELECT definition, type FROM sys.sql_modules AS m JOIN sys.objects AS o ON m.object_id = o.object_id AND type = ('FN');sys.parameters: A felhasználó által definiált függvényekben definiált paraméterekkel kapcsolatos információkat jeleníti meg.
sys.sql_expression_dependencies: Megjeleníti a függvény által hivatkozott mögöttes objektumokat.
Engedélyek
A CREATE FÜGGVÉNY engedélyre van szükség az adatbázisban, és alter engedélyt kell kérni azon a sémán, amelyben a függvény létrejön.
Példák
Egy. Skaláris értékű, felhasználó által definiált függvény használata adattípus módosításához
Ez az egyszerű függvény bemenetként egy int adattípust használ, és kimenetként decimális (10,2) adattípust ad vissza.
CREATE FUNCTION dbo.ConvertInput (@MyValueIn int)
RETURNS decimal(10,2)
AS
BEGIN
DECLARE @MyValueOut int;
SET @MyValueOut= CAST( @MyValueIn AS decimal(10,2));
RETURN(@MyValueOut);
END;
GO
SELECT dbo.ConvertInput(15) AS 'ConvertedValue';
Megjegyzés:
A skaláris függvények nem érhetők el a kiszolgáló nélküli SQL-készletekben.
B. Beágyazott táblaértékű függvény létrehozása
Az alábbi példa egy beágyazott táblaértékű függvényt hoz létre, amely visszaad néhány fontos információt a modulokról, a objectType paraméter alapján szűrve. Ez egy alapértelmezett értéket tartalmaz, amely az összes modult visszaadja, amikor a függvényt meghívják a DEFAULT paraméterrel. Ez a példa a metaadatokban említett rendszerkatalógus-nézetek némelyikét használja.
CREATE FUNCTION dbo.ModulesByType(@objectType CHAR(2) = '%%')
RETURNS TABLE
AS
RETURN
(
SELECT
sm.object_id AS 'Object Id',
o.create_date AS 'Date Created',
OBJECT_NAME(sm.object_id) AS 'Name',
o.type AS 'Type',
o.type_desc AS 'Type Description',
sm.definition AS 'Module Description'
FROM sys.sql_modules AS sm
JOIN sys.objects AS o ON sm.object_id = o.object_id
WHERE o.type like '%' + @objectType + '%'
);
GO
A függvény ezután meghívható az összes nézet (V) objektum visszaadásához a következőkkel:
select * from dbo.ModulesByType('V');
Megjegyzés:
A beágyazott táblaértékfüggvények a kiszolgáló nélküli SQL-készletekben érhetők el, de előzetes verzióban a dedikált SQL-készletekben.
C. Beágyazott táblaértékű függvény eredményeinek kombinálása
Ez az egyszerű példa a korábban létrehozott beágyazott TVF-et használja annak bemutatására, hogy eredményei hogyan kombinálhatók más táblákkal kereszt alkalmazva. Itt kiválasztjuk az összes oszlopot mindkét sys.objects oszlopból, és az oszlopon ModulesByType lévő összes sor eredményéttype. További információ az alkalmazás használatáról: FROM záradék plusz JOIN, APPLY, PIVOT (Transact-SQL).
SELECT *
FROM sys.objects o
CROSS APPLY dbo.ModulesByType(o.type);
GO
Megjegyzés:
A beágyazott táblaértékfüggvények a kiszolgáló nélküli SQL-készletekben érhetők el, de előzetes verzióban a dedikált SQL-készletekben.