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 Analytics-végpont a Microsoft Fabricben és a Microsoft Fabric warehouse-ban
CREATE FUNCTION inline táblázatértékű függvényeket és skaláris függvényeket hoz 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 skaláris UDF-ek, amelyek nem határolhatók, korlátozott számú helyzetben működnek. Ellenőrizheti , hogy egy UDF beágyazott-e.
A felhasználó által definiált függvény egy Transact-SQL rutin, amely paramétereket fogad el, végrehajt egy olyan műveletet, mint egy összetett számítás, és az adott művelet eredményét értékként adja 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.
Használd CREATE FUNCTION egy újrahasználható T-SQL rutin létrehozására, amelyet a következőképpen használhatsz:
- 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
Megadhatod CREATE OR ALTER FUNCTION , hogy létrehozz egy új függvényt, ha nincs ilyen néven, vagy módosíthatsz egy meglévő függvényt egyetlen állí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 követniük kell az azonosítók szabályait, és egyedinek kell lenniük az adatbázisban és annak sémájában.
Megjegyzés:
A függvénynév után zárójeleket kell beilleszteni, még akkor is, ha nem jelölsz meg paramétert.
@ parameter_name
A felhasználó által definiált függvény paramétere. Be lehet jelenteni egy vagy több paramétert.
Egy függvénynek legfeljebb 2100 paramétere lehet. Amikor egy felhasználó vagy alkalmazás függvényt hív, minden deklarált paraméter értékét meg kell adni, hacsak nincs alapértelmezett paraméter meghatározása.
Adjon meg egy paraméternevet úgy, hogy első karakterként egy at sign (@) karaktert használ. A paraméter nevének követnie kell az azonosítók szabályait. A paraméterek lokálisak a függvényre; Ugyanazokat a paraméterneveket más függvényekben is használhatod. A paraméterek csak az állandókat helyettesíthetik; nem használhatók táblanevek, oszlopnevek vagy más adatbázis-objektumok nevei helyett.
Megjegyzés:
ANSI_WARNINGS nem teljesül, 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. Például, ha egy változót char(3)-ként definiálsz, majd három karakternél nagyobb értékre állítod, az adat a megadott méretre rövidítik, és az SQL 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éket definiálsz, akkor a függvényt úgy is végrehajthatod, hogy megadnád az adott paraméterhez szükséges értéket.
Ha a függvény paraméterének alapértelmezett értéke van, DEFAULT akkor a kulcsszót kell megadnod, amikor a függvényt hívod az alapértelmezett érték elé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 nonskaláris típusok, mint például a táblázat , 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 - Vezérlő áramlási utasítások (
WHILEhurkok,RETURNS)
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. Egy besoros táblázatértékű függvény esetén nincs függvénytest; a tábla egyetlen SELECT állítás eredményhalmaza.
TABLE
Megadja, hogy a táblaértékű függvény (TVF) visszatérési értéke tábla. Csak állandókat és @local_variables-t tudsz átadni TVF-eknek.
Az inline TVF-ekben (előnézet) egyetlen állítással definiáljuk a TABLE visszahozási értéket SELECT . A beágyazott függvények nem rendelkeznek társított visszatérési változókkal.
<function_option>
Fabric Data Warehouse-ben a INLINE, ENCRYPTION, és EXECUTE AS kulcsszavak nem támogatottak.
A támogatott funkciók a következők:
SÉMAKÖTÉS
Megadja, hogy a függvény az általa hivatkozott adatbázis-objektumokhoz legyen kötve. Ha megadod SCHEMABINDING, nem módosíthatod az alapul szolgáló objektumokat (például egy nézetet vagy táblát) úgy, hogy az befolyásolja a függvény definícióját. Először módosítani vagy el kell hagyni a függvénydefiníciót, hogy eltávolítsuk a függőségeket a módosítani kívánt objektumról.
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:
Kihagyod a funkciót.
Te
ALTERadd a függvényutasítást, és távolítod el azSCHEMABINDINGopciót.
Csak akkor lehet sémához kötni egy függvényt, ha a következő feltételek érvényesek:
Bármely felhasználó által definiált függvény, amelyre a függvény hivatkozik, szintén sémához kötött.
A függvény két részes név használatával hivatkozik objektumokra.
Az UDF-ek testén belül csak a beépített függvényekre és más UDF-ekre lehet hivatkozni ugyanabban az adatbázisban.
A felhasználó végrehajtja
CREATE FUNCTIONaz utasítást REFERENCES jogosultsággal rendelkezik azokon az adatbázisobjektumoknál, 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 nem határozod meg ezt az attribútumot, CALLED ON NULL INPUT alapértelmezettként implicit van, és a függvénytest akkor is fut, ha NULL argumentumként adják át.
Ajánlott eljárások
Ha nem hozol létre felhasználó által definiált függvényt sémakötéssel, az alapul szolgáló objektumok változásai befolyásolhatják a függvény definícióját, és váratlan eredményeket okozhatnak a függvény meghívásakor. Amikor megadod
WITH SCHEMABINDING, mikor hozod létre a függvényt, biztosítod, hogy a későbbi változások az alapobjektumokon ne változtassanak vagy ne törjék meg a funkció viselkedését.Írd meg a felhasználó által definiált függvényeket inlinehatóvá. További információért lásd: A skalár UDF beépítése.
Interoperabilitás
Beágyazott táblaértékű, felhasználó által definiált függvények
Egy besoros táblázatértékű függvény csak egyetlen SELECT állítást fogad el.
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.
- Áramlás-kontroll utasítások, kivéve
TRY...CATCHésGO..TOutasításokat. -
DECLAREHelyi adatváltozókat definiáló állítások. - Hivatkozások táblázatokra/nézetekre/iTVF-ekre/más skaláris UDF-ekre.
A skaláris értékű függvények törzse nem támogatja a következő beépített függvényeket:
Korlátozások
Megjegyzés:
Az aktuális előzetes verzióban a korlátozások változhatnak.
Felhasználó-definiált függvényeket nem használhatsz olyan műveletekhez, amelyek módosítják az adatbázis állapotát.
Be lehet ágyazni a felhasználó által definiált függvényeket. Vagyis egy felhasználó által definiált függvény meghívhat egy másikat. A beágyazási szint akkor nő, amikor a hívott függvény elindul, és csökken, amikor a hívott függvény befejezi a végrehajtást. Fabric Data Warehouse-ben akár négy szintig is beágyazhatod a felhasználó által definiált függvényeket, ha egy UDF test egy táblázatra, nézetre vagy sorbeli táblázatértékű függvényre hivatkozik, vagy egyébként akár 32 szintet is. Ha túlléped a maximális fészekezési szintet, a hívó függvénylánc meghibásodik.
A skaláris UDF-ek nem használhatók felhasználói táblák lekérdezéseiben
SELECT ... FROM, ha:- Az UDF test tartalmaz egy hívást nemdeterminisztikus beépített függvényre (például
GETDATE()), lásd Determinisztikus és nemdeterminisztikus függvényeket. - Az UDF törzse tartalmaz
BREAKvagyCONTINUEállítást. - Van egy rekurzív skaláris UDF hívás.
- Az UDF test tartalmaz egy hívást nemdeterminisztikus beépített függvényre (például
A skalár UDF nem használható minden lekérdezési alakban, például CTE-kben, és
GROUP BYamikor:- A skalár UDF test táblázatokra/nézetekre/iTVF-ekre/egyéb skaláris UDF-ekre hivatkozik.
- A skalár UDF tartalmazza ezeket az adattípusokat bemeneti paraméterként, helyi változóként vagy visszaadó adattípusként: varchar(max), nvarchar(max), varbinary(max), binary(max).
- A skaláris UDF test MI funkciókra hív meg.
- A fenti esetekben általános skaláris udf beágyazási követelmények vonatkoznak, lásd Skalár UDF beágyazási követelményeket.
Ha egy skaláris UDF tartalmazza az alábbiak egyikét, egy felhasználói lekérdezés meghibásíthat, ha egyetlen lekérdezésben több mint 10 UDF hívást hajtanak végre:
- A skalár UDF test táblázatokra/nézetekre/iTVF-ekre/egyéb skaláris UDF-ekre hivatkozik.
- A skalár UDF tartalmazza ezeket az adattípusokat bemeneti paraméterként, helyi változóként vagy visszaadó adattípusként: varchar(max), nvarchar(max), varbinary(max), binary(max).
- A skaláris UDF test AI funkciókhoz hívó hívásokat tartalmaz.
Amikor skaláris UDF-et használnak bármilyen támogatatlan helyzetben, a lekérdezés végrehajtási idején egy "
Scalar UDF execution is currently unavailable in this context." hibaüzenetet látunk.
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, valamint az inlinebilitási információkat. Például:
SELECT SCHEMA_NAME(o.schema_id) AS SchemaName, o.name AS FunctionName, m.definition AS FunctionDefinition, m.is_inlineable AS Inlineable, m.inline_eligibility_mask AS InlineEligibilityMask FROM sys.objects o JOIN sys.sql_modules m ON o.object_id = m.object_id WHERE o.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ár UDF beágyazása
Microsoft Fabric Data Warehouse különböző beágyazott technikákat alkalmaz a felhasználó által definiált kód elosztott fordításához és végrehajtásához.
A skalár UDF beépítése alapértelmezés szerint engedélyezett.
Egyes T-SQL-szintaxisok miatt a skaláris UDF nem olvasható. Például azok a függvények, amelyek egy WHILE ciklus kombinációját tartalmazzák és egy táblázatot hivatkoznak az UDF testen belül, nem lehetnek besorolhatók.
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 az UDF definíción belüli szintaxisnak ellenőrzéséből származik. A skaláris UDF nem van besorolva a fordítási idő előtt.
A inline_eligibility_mask tulajdonság elmagyarázza, hogy milyen típusú inlining alkalmazható az UDF-re.
- Az érték
0azt jelenti, hogy az UDF nem határtalan. - A -
1érték azt jelzi, hogy az UDF jogosult a skaláris UDF beépítésre. - Az érték
2azt jelenti, hogy az UDF jogosult az expresszionális blokkon keresztül beágyazásra. - Az érték
3azt jelenti, hogy az UDF jogosult bármelyik beágyazott technikára.
Ha egy skaláris UDF inlineable, az nem garantálja, hogy mindig beírt legyen a lekérdezés fordításakor.
Fabric Data Warehouse (lekérdezés szerint) dönti el, melyik beilleszkedési technikát alkalmazza.
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árfüggvény nem inlineable , sys.sql_modules.is_inlineableakkor a lekérdezést akár önálló hívásként is végrehajthatod, például egy változó beállításához. De a skaláris függvény nem lehet része egy SELECT ... FROM lekérdezésnek egy felhasználói táblán. Például:
CREATE FUNCTION [dbo].[custom_SYSUTCDATETIME]()
RETURNS datetime2(6)
AS
BEGIN
RETURN SYSUTCDATETIME();
END
A mintaszkalár dbo.custom_SYSUTCDATETIME felhasználó által definiált függvény nem soros egy nem-determináns rendszerfüggvény használata miatt, SYSUTCDATETIME(). Felhasználói SELECT ... FROM tábla lekérdezésében meghibásodik, de önálló hívásként sikerrel jár. 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 sorbeli táblázatértékű függvényt hoz létre, amely kulcsfontosságú információkat ad vissza a modulokról, paraméter objectType szerint szűrve. Tartalmaz egy alapértelmezett értéket, amely minden modult visszaad, amikor a paraméterrel rendelkező függvényt DEFAULT hívod. Ez a példa a Metadata-ban említett rendszerkatalógus nézeteket 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
Hívjuk meg a függvényt, hogy visszaadja az összes sorbeli táblázatértékű függvényt (IF):
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 inline TVF-et használja arra, hogyan lehet az eredményeit más táblázatokkal kombinálni a használatával CROSS APPLY. Itt mindkettőből sys.objects kiválasztod az összes oszlopot, valamint az ModulesByType összes sor, amely egyezik az type oszlopon. További információért APPLYa használatról lásd a FROM klaud plusz A 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-es szintaxisért lásd az for Fabric Data Warehouse verziójátCREATE FUNCTION.
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 készíts egy újrahasználható rutint, amelyet az alábbi módokon használhatsz:
Az olyan Transact-SQL kijelentésekben, mint például
SELECTA függvényt meghí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 követniük kell az azonosítók szabályait, és egyedinek kell lenniük az adatbázisban és annak sémájában.
Megjegyzés:
A függvénynév után zárójeleket kell beilleszteni, még akkor is, ha nem jelölsz meg paramétert.
@ parameter_name
A felhasználó által definiált függvény paramétere. Be lehet jelenteni egy vagy több paramétert.
Egy függvénynek legfeljebb 2100 paramétere lehet. Amikor egy felhasználó vagy alkalmazás függvényt hív, minden deklarált paraméter értékét meg kell adni, hacsak nincs alapértelmezett paraméter meghatározása.
Adjon meg egy paraméternevet úgy, hogy első karakterként egy at sign (@) karaktert használ. A paraméter nevének követnie kell az azonosítók szabályait. A paraméterek lokálisak a függvényre; Ugyanazokat a paraméterneveket más függvényekben is használhatod. A paraméterek csak az állandókat helyettesíthetik; nem használhatók táblanevek, oszlopnevek vagy más adatbázis-objektumok nevei helyett.
Megjegyzés:
ANSI_WARNINGS nem teljesül, 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. Például, ha egy változót char(3)-ként definiálsz, majd három karakternél nagyobb értékre állítod, az adat a megadott méretre rövidítik, és az INSERT or UPDATE utasítás sikerül.
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 (sorverzió) adattípus nem támogatott típus.
[ = alapértelmezett ]
A paraméter alapértelmezett értéke. Ha alapértelmezett értéket definiálsz, akkor a függvényt úgy is végrehajthatod, hogy megadnád az adott paraméterhez szükséges értéket.
Ha a függvény paraméterének alapértelmezett értéke van, DEFAULT akkor a kulcsszót kell megadnod, amikor a függvényt hívod az alapértelmezett érték elé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 sorverzió/időbélyeg adattípusa nem támogatott típus. A kurzor és a táblázat nonskaláris típusai nem engedélyezettek.
function_body
Transact-SQL utasítások sorozata. A function_body nem tartalmazhat állítást SELECT , és nem hivatkozhat adatbázis adatokra.
A function_body nem tud táblázatokat vagy nézeteket használni. A függvénytest más determinisztikus függvényeket is hívhat, de nemdeterminisztikus függvényeket nem.
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. Egy besoros táblázatértékű függvény esetén nincs függvénytest; a tábla egyetlen SELECT állítás eredményhalmaza.
TABLE
Megadja, hogy a táblaértékű függvény (TVF) visszatérési értéke tábla. Csak állandókat és @local_variables-t tudsz átadni TVF-eknek.
Az inline TVF-ekben (előnézet) egyetlen állítással definiáljuk a TABLE visszahozási értéket SELECT . 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. Ha megadod SCHEMABINDING, nem módosíthatod az alapul szolgáló objektumokat (például egy nézetet vagy táblát) úgy, hogy az befolyásolja a függvény definícióját. Először módosítani vagy el kell hagyni a függvénydefiníciót, hogy eltávolítsuk a függőségeket a módosítani kívánt objektumról.
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:
Kihagyod a funkciót.
Te
ALTERadd a függvényutasítást, és távolítod el azSCHEMABINDINGopciót.
Csak akkor lehet sémához kötni egy függvényt, ha a következő feltételek érvényesek:
Bármely felhasználó által definiált függvény, amelyre a függvény hivatkozik, szintén sémához kötött.
A függvényhivatkozások egy- vagy kétrészes neveket használnak.
Az UDF-ek testén belül csak a beépített függvényekre és más UDF-ekre lehet hivatkozni ugyanabban az adatbázisban.
A felhasználó végrehajtja
CREATE FUNCTIONaz utasítást REFERENCES jogosultsággal rendelkezik azokon az adatbázisobjektumoknál, 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 nem határozod meg ezt az attribútumot, CALLED ON NULL INPUT alapértelmezettként implicit van, és a függvénytest akkor is fut, ha NULL argumentumként adják át.
Ajánlott eljárások
Ha nem hozol létre felhasználó által definiált függvényt a SCHEMABINDING záradékkal, az alapul szolgáló objektumok változásai befolyásolhatják a függvény definícióját, és váratlan eredményeket okozhatnak, amikor meghívod. Határozd meg a WITH SCHEMABINDING záradékot, amikor létrehozod a függvényt. Ez a záradék biztosítja, hogy a függvénydefinícióban hivatkozott objektumokat ne módosítsd, hacsak nem módosítod a függvényt is.
Interoperabilitás
A következő utasítások érvényesek egy skaláris értékű függvényben:
Hozzárendelési utasítások.
Áramlásirányítási utasítások, kivéve a TRY-t... CATCH nyilatkozatok.
DECLARE utasításokat definiálnak, amelyek helyi adatváltozókat definiálnak.
Egy besorbeli táblázatértékű függvényben (előnézet) csak egyetlen select utasítást használhatsz.
Korlátozások
Felhasználó-definiált függvényeket nem használhatsz olyan műveletekhez, amelyek módosítják az adatbázis állapotát.
Be lehet ágyazni a felhasználó által definiált függvényeket. Egy felhasználó által definiált függvény meghívhat egy másikat. A beágyazási szint akkor nő, amikor a hívott függvény elindul, és csökken, amikor a hívott függvény befejezi a végrehajtást. Ha túlléped a maximális fészkelési szintet, az egész hívó függvénylánc meghibásodik.
Nem lehet objektumokat, beleértve funkciókat is, létrehozni a master szerver nélküli SQL poolod adatbázisában az Azure Synapse Analytics-ben.
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
Engedélyt CREATE FUNCTION kell megadni az adatbázisban, és ALTER engedélyt kell adni azon a sémán, amelyben a függvényt létrehozják.
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 int adattípust vesz bemenetként, és egy tizedes (10,2) adattípust ad vissza kimenetként.
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:
Skaláris függvények nem elérhetők szerver nélküli SQL poolokban.
B. Beágyazott táblaértékű függvény létrehozása
Az alábbi példa egy sorbeli táblázatértékű függvényt hoz létre, amely kulcsfontosságú információkat ad vissza a modulokról, paraméter objectType szerint szűrve. Tartalmaz egy alapértelmezett értéket, amely minden modult visszaad, amikor a paraméterrel rendelkező függvényt DEFAULT hívod. Ez a példa a Metadata-ban említett rendszerkatalógus nézeteket 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ényt az összes view (V) objektum visszaadására hívhatod a következőket:
select * from dbo.ModulesByType('V');
Megjegyzés:
Az inline táblázat-érték függvények elérhetők szerver nélküli SQL poolokban, de előnézetben a dedikált SQL poolokban.
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 inline TVF-et használja arra, hogyan lehet az eredményeit más táblázatokkal kombinálni a használatával CROSS APPLY. Ebben a példában mindkettőből sys.objects kiválasztod az összes oszlopot, valamint az ModulesByType összes sor, amely egyezik az type oszlopban. További információért APPLYa használatról lásd a FROM klaud plusz A JOIN, APPLY, PIVOT (Transact-SQL).
SELECT *
FROM sys.objects o
CROSS APPLY dbo.ModulesByType(o.type);
GO
Megjegyzés:
Az inline táblázat-érték függvények elérhetők szerver nélküli SQL poolokban, de előnézetben a dedikált SQL poolokban.