Bejelentkezés Microsoft-fiókkal
Jelentkezzen be, vagy hozzon létre egy fiókot.
Üdvözöljük!
Válasszon másik fiókot.
Több fiókja van
Válassza ki a bejelentkezéshez használni kívánt fiókot.

Jelenségek

User-Defined Transact-SQL-ben implementált és egyetlen adatértéket visszaadó függvényeket T-SQL skaláris User-Defined függvényeknek (UDF-eknek) nevezzük. 

A Skaláris UDF-körvonalazási funkció a Microsoft SQL Server 2019-ben jelent meg. Ez a funkció javíthatja az olyan T-SQL skaláris UDF-eket meghívó lekérdezések teljesítményét, amelyekben az UDF végrehajtása a fő szűk keresztmetszet. A T-SQL skaláris UDF inlining automatikusan relációs kifejezésekké alakítja át a beágyazott UDF-eket. 

Ez az összegző frissítés (CU) az alábbi területeken számos javítást tartalmaz olyan forgatókönyvek esetében, amelyekben a skaláris UDF-formázást használó lekérdezés hibaüzenetet vagy váratlan eredményeket adhat vissza:

  • Típuseltérési hiba akkor fordul elő, ha az UDF visszatérési típusa egy sql_variant (SQL Server 2019 CU2-ben van hozzáadva).

  • Asp_executesqlUDF-hívása megszakítja a végrehajtást (SQL Server 2019 CU2-ben van hozzáadva).

  • Azok az UDF-ek, amelyek társított GOTO parancs nélküli címkékre hivatkoznak, helytelen eredményeket adnak vissza (SQL Server 2019 CU2-ben lettek hozzáadva).

  • A memóriakimaradás és a memóriavesztés a nagyon nagy skaláris UDF-ek miatt fordul elő (a 2019 CU2 SQL Server része).

  • A feltételben (IF-ELSE) használt nem inicializált változók hibát okoznak (a 2019 CU2 SQL Server-ben lettek hozzáadva).

  • Explicit konverziós hiba akkor fordul elő, ha egy UDF sql_variantparaméterrel rendelkezik (SQL Server 2019 CU7-ben lett hozzáadva).

  • Hiba akkor fordul elő, ha a skaláris függvény CHECKSUMhivatkozik (a SQL Server 2019 CU7-ben van hozzáadva).

  • A sok skaláris kifejezés újraértékelésével rendelkező UDF-hívás nem eredményező ütemezőhibát okozhat (SQL Server 2019 CU7-ben lett hozzáadva).

    Megjegyzés: A probléma javítása időnként teljesítményregressziót okozhat. A teljesítményregresszió csökkentése érdekében letilthatja az eredeti javítást a nyomkövetési jelző (TF) 13156 bekapcsolásával.

    A Microsoft dolgozik a teljesítményregresszió javításán, amely egy későbbi cu-ban lesz elérhető.

  • Hiba történik, ha az UDF-hivatkozó lekérdezés OPTION (RECOMPILE)használ (a 2019 CU7 SQL Server van hozzáadva).

  • Engedélyhibák akkor fordulnak elő, ha a nézetek beágyazott UDF-eket hívnak meg (SQL Server 2019 CU9-ben hozzáadva).

  • Hozzáférési szabálysértések akkor fordulnak elő, ha aquery_tsql_scalar_udf_inlinedXEventet használják (a SQL Server 2019 CU9-ben van hozzáadva).

  • Az inkonzisztens viselkedés azért fordul elő, mert a skaláris UDF-formázás nem tartja tiszteletben a QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nlekérdezési tippet (a 2019 CU9 SQL Server van hozzáadva).

  • A beágyazott UDF-ek olyan aggregációkat tartalmaznak, amelyek nem eredményező ütemezőhibákat okozhatnak (SQL Server 2019 CU9-ben lett hozzáadva).

  • Memóriahiba lép fel a feltételes blokkok ugyanazon változóján végzett skaláris műveletek sorozata miatt (SQL Server 2019 CU9-ben hozzáadva).

  • A CU9-re való frissítés után hozzáférés-megsértés lép fel, ha egy objektum skaláris beágyazott UDF-et (UDF1) hív meg, amely skaláris beágyazott UDF-et (UDF2) használ bemeneti paraméterként (SQL Server 2019 CU11-ben).

  • Az UDF-ek felvázolása hibákat okozhat, és a 6846-os, 1011-os és 107-os hibakódokat eredményezheti (a 2019 CU11 SQL Server-ben van hozzáadva).

  • A nem sysadmin fiókként futó UDF-ek a következő hibaüzenetet kaphatják: "Súlyos hiba történt az aktuális parancsban.  Az eredményeket, ha vannak, el kell vetni" (hozzáadva a SQL Server 2019 CU16-ban).

  • Hozzáférés-megsértés akkor fordul elő, ha az ideiglenes táblákat szinonimák használatával hívja meg a rendszer az UDF-ben (a Microsoft SQL Server 2022 CU1 és SQL Server 2019 CU19 verzióban).

  • Hozzáférés-megsértés akkor következik be, ha az UDF-definíció csak GOTO címkéket és egyRETURN utasítást tartalmaz (SQL Server 2022 CU1 és SQL Server 2019 CU19).

  • A skaláris UDF különböző dátum- és időformátumokat ad vissza, ha a Skaláris UDF-formázási funkció be van kapcsolva (SQL Server 2022 CU3 és SQL Server 2019 CU20).

  • Memóriaképfájl akkor jön létre, ha egy GROUP BY záradékkal rendelkező lekérdezés beágyazott UDF-eket használ egy SELECT utasításban összesítő függvény nélkül (hozzáadva a 2022 CU12 és SQL Server 2019 CU26 SQL Server).

  • A "Maximális tárolt eljárás, függvény, eseményindító vagy nézet beágyazási szintje túllépve (32-es korlát)" hiba akkor fordul elő, ha a Skaláris UDF-formázási funkció be van kapcsolva, még akkor is, ha a beágyazási szint nincs túllépve (SQL Server 2022 CU12-ben és SQL Server 2019 CU26-ban).

  • Memóriasérülés akkor fordul elő sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf , ha a Skaláris UDF-formázási funkció be van kapcsolva (SQL Server 2022 CU12-ben és SQL Server 2019 CU26-ban).

Ez az összegző frissítés a következő forgatókönyvekbe történő beszűkítést is blokkolja:

  • Ha az UDF hivatkozik bizonyos belső függvényekre (például @@ROWCOUNT), amelyek megváltoztathatják az eredményeket az UDF beágyazott állapotában (SQL Server 2019 CU2-ben).

  • Ha az aggregátumfüggvények paraméterként lesznek átadva egy skaláris UDF-nek (a 2019 CU2 SQL Server van hozzáadva).

  • Ha az UDF beépített nézetekre hivatkozik (például: OBJECT_ID) (SQL Server 2019 CU2-ben van hozzáadva).

  • Ha az UDF XML-metódusokat használ (a SQL Server 2019 CU4-ben van hozzáadva).

  • Ha az UDF tartalmaz egy SELECTutasítást, amely aORDER BYzáradékot használja, de nem TOP 1(SQL Server 2019 CU4-ben van hozzáadva).

  • Ha aSELECT utasítás a ORDER BY záradékkal (például SELECT @x = @x +1 FROM table ORDER BY column_name) együtt végez hozzárendelést (a 2019 CU4 SQL Server tartalmazza).

  • Ha az UDF több RETURN utasítást tartalmaz (SQL Server 2019 CU5-ben van hozzáadva).

  • Ha az UDF egy RETURN utasításból van meghívva (SQL Server 2019 CU5-ben van hozzáadva).

  • Ha az UDF a STRING_AGG függvényre hivatkozik (a SQL Server 2019 CU5-ben van hozzáadva).

  • Ha az UDF-definíció távoli táblákra hivatkozik (SQL Server 2019 CU6-ban van hozzáadva).

  • Ha az UDF-hívó lekérdezés GROUPING SETS, CUBEvagy ROLLUP használ (SQL Server 2019 CU6-ban van hozzáadva).

  • Ha az UDF-hívó lekérdezés tartalmaz egy változót, amelyet A hozzárendelés UDF-paramétereként használnak (például SELECT @y=2, @x=UDF(@y)) (a 2019 CU6 SQL Server-ben van hozzáadva).

  • Ha az UDF titkosított oszlopokra hivatkozik (SQL Server 2019 CU11-ben van hozzáadva).

  • Ha az UDF WITH XMLNAMESPACEShivatkozik (SQL Server 2019 CU11-ben van hozzáadva).

  • Ha az UDF-et meghívó lekérdezés common table expressions (CTE) (a 2019 CU11 SQL Server-ban lett hozzáadva).

  • Ha az UDF-definíció ideiglenes táblákat vagy szinonimákat tartalmaz az ideiglenes táblákhoz (SQL Server 2022 CU1 és SQL Server 2019 CU19).

  • Ha az UDF-definíció egySELECTutasítással és egyDISTINCTzáradékkal rendelkezik több hozzárendelési oszlopon (SQL Server 2022 CU4-ben és SQL Server 2019 CU20-ban).

  • Ha az UDF tartalmaz egy SELECT utasítást, amely a TABLESAMPLE PERCENT záradékot és több változó-hozzárendelést (a 2022 CU7 SQL Server tartalmazza).

  • Ha INSERT lekérdezés található egy UDF-et tartalmazó indexelt nézet által hivatkozott táblán (hozzáadva a 2022 CU12 és SQL Server 2019 CU26 SQL Server).

Miután SQL Server 2019 CU2-re frissített, de mielőtt SQL Server 2019 CU5-re frissít, újra meg kell vizsgálnia, hogy az UDF jogosult-e a formázásra. Ehhez frissítse a jogosult skaláris UDF-eket az alábbi módszerek valamelyikével:

  • Futtassa sp_refreshsqlmodule a megfelelő skaláris UDF-ekhez. A rendszer által tárolt eljárással kapcsolatos további információkért lásd: sp_refreshsqlmodule (Transact-SQL).

  • Módosítsa vagy hozza létre újra a meglévő skaláris UDF-et meglévő definíciók, engedélyek és tulajdonságok használatával. További információ: ALTER FUNCTION (Transact-SQL).

A következő parancs létrehoz egy szkriptet a meglévő beágyazott skaláris UDF-ek metaadatainak frissítéséhez:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Megjegyzés: Miután SQL Server 2019 CU5-re frissített, a fordítás során automatikusan folytatjuk az UDF beágyazottságának származtatását.

Megoldás

Ezt a problémát a következő összegző frissítések javítják ki a SQL Server esetében:

A SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és az előző összegző frissítésben szereplő összes biztonsági javítást. Tekintse meg az SQL Server legújabb összegző frissítéseit:

Állapot

A Microsoft megerősítette, hogy ez a probléma a "Hatókör" szakaszban felsorolt Microsoft-termékekben található.

Hivatkozások

Ismerje meg a Microsoft által a szoftverfrissítések leírására használt terminológiát .

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.

A közösségek segítségével kérdéseket tehet fel és válaszolhat meg, visszajelzést adhat, és részletes ismeretekkel rendelkező szakértőktől hallhat.

Hasznos volt ez az információ?

Mennyire elégedett a fordítás minőségével?
Mi volt hatással a felhasználói élményére?
Ha elküldi a visszajelzést, a Microsoft felhasználja azt a termékei és szolgáltatásai továbbfejlesztéséhez. Az informatikai rendszergazda képes lesz ezeket az adatokat összegyűjteni. Adatvédelmi nyilatkozat.

Köszönjük a visszajelzését!

×