Conectați-vă cu Microsoft
Conectați-vă sau creați un cont
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Simptome

User-Defined Functions (UDF) care sunt implementate în Transact-SQL și care returnează o valoare de date unică sunt cunoscute ca Funcții T-SQL Scalar User-Defined (UDF). 

Caracteristica Schițare UDF scalară a fost introdusă în Microsoft SQL Server 2019. Această caracteristică poate îmbunătăți performanța interogărilor care invocă UDF-uri scalare T-SQL în care executarea UDF este principalul blocaj. Schițarea UDF scalară T-SQL transformă automat UDF-urile inlineable în expresii relaționale. 

Această actualizare cumulativă (CU) include mai multe remedieri în următoarele zone pentru scenariile în care o interogare care utilizează Scalar UDF Inlining poate returna un mesaj de eroare sau rezultate neașteptate:

  • Eroarea de nepotrivire de tip apare dacă tipul de returnare UDF este un sql_variant (adăugat în SQL Server 2019 CU2).

  • Invocarea UDF de lasp_executesqlanulează execuția (adăugată în SQL Server 2019 CU2).

  • UDF-urile care fac referire la etichete fără o comandă GOTO asociată returnează rezultate incorecte (adăugate în SQL Server 2019 CU2).

  • Condițiile de memorie insuficientă și pierderile de memorie apar din cauza UDF-urilor scalare foarte mari (adăugate în SQL Server 2019 CU2).

  • Variabilele neinițializate care sunt utilizate în instrucțiunile condiție (IF-ELSE) provoacă erori (adăugate în SQL Server 2019 CU2).

  • Eroarea de conversie explicită apare dacă un UDF are parametrul sql_variant(adăugat în SQL Server 2019 CU7).

  • Apare o eroare dacă funcția scalară face referire la CHECKSUM(adăugată în SQL Server 2019 CU7).

  • Invocarea UDF care are multe reevaluări scalare ale expresiilor poate provoca o eroare de planificator care nu dă randament (adăugată în SQL Server 2019 CU7).

    Notă: Remedierea pentru această problemă poate provoca uneori o regresie de performanță. Pentru a atenua această regresie de performanță, puteți dezactiva remedierea inițială activând semnalizatorul de urmărire (TF) 13156.

    Microsoft lucrează la o remediere pentru această regresie de performanță care va fi disponibilă într-o cuc viitoare.

  • Apare o eroare dacă interogarea de referență UDF utilizează OPTION (RECOMPILE)(adăugat în SQL Server 2019 CU7).

  • Erorile de permisiune apar dacă vizualizările invocă UDF-uri schiță (adăugate în SQL Server 2019 CU9).

  • Încălcările de acces apar dacă se utilizeazăquery_tsql_scalar_udf_inlinedXEvent (adăugat în SQL Server 2019 CU9).

  • Un comportament inconsistent apare deoarece Inliningul UDF scalar nu respectă indiciul de interogare QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(adăugat în SQL Server 2019 CU9).

  • Inlining UDF contain aggregations that can cause non-yielding scheduler errors (added in SQL Server 2019 CU9).

  • Erorile de memorie insuficientă apar din cauza unei secvențe de operațiuni scalare pe aceeași variabilă din blocurile condiționale (adăugate în SQL Server 2019 CU9).

  • După ce faceți upgrade la CU9, apare o încălcare a accesului dacă un obiect invocă un UDF scalar inlineable (UDF1) care are o UDF (UDF2) scalară inlineable, care este utilizată ca parametru de intrare (adăugată în SQL Server 2019 CU11).

  • Inlining UDF might cause errors and generate error codes 6846, 1011, and 107 (added in SQL Server 2019 CU11).

  • Inlining UDFs that run as the non-sysadmin account might return the error message, "A apărut o eroare severă în comanda curentă.  Rezultatele, dacă există, ar trebui eliminate" (adăugate în SQL Server 2019 CU16).

  • O încălcare a accesului apare dacă tabelele temporare sunt invocate în UDF-uri utilizând sinonime (adăugate în Microsoft SQL Server 2022 CU1 și SQL Server 2019 CU19).

  • O încălcare a accesului apare dacă definiția UDF conține doar etichete de GOTO și o instrucțiune deRETURN (adăugată în SQL Server 2022 CU1 și SQL Server 2019 CU19).

  • UDF scalar returnează rezultate în formate de dată și oră diferite atunci când este activată caracteristica Scalar UDF Inlining (adăugată în SQL Server 2022 CU3 și SQL Server 2019 CU20).

  • Se generează un fișier dump dacă o interogare care are o clauză GROUP BY utilizează UDF-uri schiță într-o instrucțiune SELECT fără o funcție agregată (adăugată în SQL Server 2022 CU12 și SQL Server 2019 CU26).

  • Eroarea "Procedura maximă stocată, funcția, triggerul sau nivelul de imbricare a vizualizării depășite (limita 32)" apare dacă este activată caracteristica Scalar UDF Inlining, chiar dacă nivelul de imbricare nu este depășit (adăugat în SQL Server 2022 CU12 și SQL Server 2019 CU26).

  • Deteriorarea memoriei apare în sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf dacă este activată caracteristica Inlining UDF scalară (adăugată în SQL Server 2022 CU12 și SQL Server 2019 CU26).

Această actualizare cumulativă blochează, de asemenea, conturarea în următoarele scenarii:

  • Dacă UDF face referire la anumite funcții intrinseci (de exemplu, @@ROWCOUNT) care pot modifica rezultatele atunci când UDF este schițat (adăugat în SQL Server 2019 CU2).

  • Atunci când funcțiile agregate sunt transmise ca parametri unei UDF scalare (adăugată în SQL Server 2019 CU2).

  • Dacă UDF face referire la vizualizări încorporate (de exemplu, OBJECT_ID) (adăugate în SQL Server 2019 CU2).

  • Dacă UDF utilizează metode XML (adăugate în SQL Server 2019 CU4).

  • Dacă UDF conține o instrucțiune SELECTcare utilizează clauzaORDER BY, dar nu și TOP 1(adăugată în SQL Server 2019 CU4).

  • Dacă instrucțiuneaSELECT efectuează o atribuire împreună cu clauza ORDER BY (de exemplu, SELECT @x = @x +1 FROM table ORDER BY column_name) (adăugată în SQL Server 2019 CU4).

  • Dacă UDF conține mai multe instrucțiuni de RETURN (adăugate în SQL Server 2019 CU5).

  • Dacă UDF este apelat dintr-o declarație de RETURN (adăugată în SQL Server 2019 CU5).

  • Dacă UDF face referire la funcția STRING_AGG (adăugată în SQL Server 2019 CU5).

  • Dacă definiția UDF face referire la tabele la distanță (adăugate în SQL Server 2019 CU6).

  • Dacă interogarea de apelare UDF utilizează GROUPING SETS, CUBEsau ROLLUP (adăugat la SQL Server 2019 CU6).

  • Dacă interogarea de apelare UDF conține o variabilă care este utilizată ca parametru UDF pentru atribuire (de exemplu, SELECT @y=2, @x=UDF(@y)) (adăugată în SQL Server 2019 CU6).

  • Dacă UDF face referire la coloane criptate (adăugate în SQL Server 2019 CU11).

  • Dacă UDF conține referințe la WITH XMLNAMESPACES(adăugat la SQL Server 2019 CU11).

  • Dacă interogarea care invocă UDF are expresii de tabel comune (CTE) (adăugate în SQL Server 2019 CU11).

  • Dacă definiția UDF conține tabele temporare sau sinonime pentru tabele temporare (adăugate în SQL Server 2022 CU1 și SQL Server 2019 CU19).

  • Dacă definiția UDF are o instrucțiuneSELECTîmpreună cu o clauzăDISTINCTpe mai multe coloane de atribuire (adăugată în SQL Server 2022 CU4 și SQL Server 2019 CU20).

  • Dacă UDF conține o instrucțiune SELECT care utilizează clauza TABLESAMPLE PERCENT și mai multe atribuiri de variabile (adăugate în SQL Server 2022 CU7).

  • Dacă există o interogare INSERT într-un tabel la care face referire o vizualizare indexată care conține UDF (adăugată în SQL Server 2022 CU12 și SQL Server 2019 CU26).

După ce faceți upgrade la SQL Server 2019 CU2, dar înainte de a face upgrade la SQL Server 2019 CU5, ar trebui să evaluați din nou dacă un UDF este eligibil pentru schițare. Pentru a face acest lucru, reîmprospătați UDF-urile scalare eligibile prin oricare dintre următoarele metode:

  • Rulați sp_refreshsqlmodule pentru UDF-urile scalabile aplicabile. Pentru mai multe informații despre această procedură stocată de sistem, consultați sp_refreshsqlmodule (Transact-SQL).

  • Modificați sau creați din nou UDF scalar existent utilizând definițiile, permisiunile și setați proprietățile existente. Pentru mai multe informații, consultați ALTER FUNCTION (Transact-SQL).

Următoarea comandă generează un script pentru a reîmprospăta metadatele tuturor UDF-urilor scalare existente:

/*

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

Notă: După ce faceți upgrade la SQL Server 2019 CU5, vom relua automat inlineabilitatea UDF în timpul compilării.

Rezolvare

Această problemă este remediată în următoarele actualizări cumulative pentru SQL Server:

Fiecare actualizare cumulativă nouă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Consultați cele mai recente actualizări cumulative pentru SQL Server:

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft listate în secțiunea "Se aplică la".

Referințe

Aflați despre terminologia pe care o utilizează Microsoft pentru a descrie actualizările de software.

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?
Apăsând pe Trimitere, feedbackul dvs. va fi utilizat pentru a îmbunătăți produsele și serviciile Microsoft. Administratorul dvs. IT va avea posibilitatea să colecteze aceste date. Angajamentul de respectare a confidențialității.

Vă mulțumim pentru feedback!

×