Log på med Microsoft
Log på, eller opret en konto.
Hej
Markér en anden konto.
Du har flere konti
Vælg den konto, du vil logge på med.

Symptomer

User-Defined funktioner (UDF'er), der implementeres i Transact-SQL, og som returnerer en enkelt dataværdi, kaldes T-SQL-skalar-User-Defined funktioner (UDF'er). 

Funktionen Scalar UDF Inlining blev introduceret i Microsoft SQL Server 2019. Denne funktion kan forbedre ydeevnen af forespørgsler, der aktiverer T-SQL-skalar-UDF'er, hvor UDF-udførelse er den største flaskehals. T-SQL Scalar UDF Inlining transformerer automatisk indbyggede UDF'er til relationelle udtryk. 

Denne kumulative opdatering indeholder flere rettelser på tværs af følgende områder for scenarier, hvor en forespørgsel, der bruger Scalar UDF Inlining, kan returnere en fejlmeddelelse eller uventede resultater:

  • Fejl i typeuoverensstemmelse opstår, hvis returtypen for UDF'en er en sql_variant (tilføjet i SQL Server 2019 CU2).

  • UDF-aktivering frasp_executesqlannullerer udførelse (tilføjet i SQL Server 2019 CU2).

  • UDF'er, der refererer til etiketter uden en tilknyttet GOTO kommando, returnerer forkerte resultater (tilføjet i SQL Server 2019 CU2).

  • Betingelser for manglende hukommelse og hukommelsesfejl opstår på grund af meget store skalarUDF'er (tilføjet i SQL Server 2019 CU2).

  • Ikke-initialiserede variabler, der bruges i betingelsessætninger (IF-ELSE) medfører fejl (tilføjet i SQL Server 2019 CU2).

  • Eksplicit konverteringsfejl opstår, hvis en UDF har parameteren sql_variant(tilføjet i SQL Server 2019 CU7).

  • Der opstår en fejl, hvis skalarfunktionen refererer CHECKSUM(tilføjet i SQL Server 2019 CU7).

  • UDF-aktivering, der har mange genevalueringer af skalarudtryk, kan medføre en ikke-afkastningsplanfejl (tilføjet i SQL Server 2019 CU7).

    Bemærk! Rettelsen af dette problem kan nogle gange medføre en forringet ydeevne. Hvis du vil reducere denne forringede ydeevne, kan du deaktivere den oprindelige rettelse ved at aktivere sporingsflag (TF) 13156.

    Microsoft arbejder på at finde en løsning til denne regression af ydeevnen, der vil være tilgængelig i en fremtidig CU.

  • Der opstår en fejl, hvis UDF-referenceforespørgslen bruger OPTION (RECOMPILE)(tilføjet i SQL Server 2019 CU7).

  • Der opstår tilladelsesfejl, hvis visninger aktiveres indbyggede UDF'er (tilføjet i SQL Server 2019 CU9).

  • Adgangsfejl opstår, hvisquery_tsql_scalar_udf_inlinedXEvent bruges (tilføjet i SQL Server 2019 CU9).

  • Inkonsekvent funktionsmåde opstår, fordi Scalar UDF Inlining ikke respekterer det QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nforespørgselstip (tilføjet i SQL Server 2019 CU9).

  • Indsætning af UDF'er indeholder sammenlægninger, der kan medføre ikke-udbyttende planlægningsfejl (tilføjet i SQL Server 2019 CU9).

  • Fejl med manglende hukommelse opstår på grund af en række skalarhandlinger på den samme variabel i betingede blokke (tilføjet i SQL Server 2019 CU9).

  • Når du opgraderer til CU9, opstår der en adgangsfejl, hvis et objekt aktiverer en skalar indbygget UDF (UDF1), der har en skalar indbygget UDF (UDF2), der bruges som en inputparameter (tilføjet i SQL Server 2019 CU11).

  • Inlining af UDF'er kan medføre fejl og generere fejlkoder 6846, 1011 og 107 (tilføjet i SQL Server 2019 CU11).

  • Hvis du angiver UDF'er, der kører som en ikke-sysadmin-konto, returneres fejlmeddelelsen "Der opstod en alvorlig fejl på den aktuelle kommando.  Eventuelle resultater skal kasseres" (tilføjet i SQL Server 2019 CU16).

  • Der opstår en adgangsfejl, hvis midlertidige tabeller aktiveres i UDFs ved hjælp af synonymer (tilføjet i Microsoft SQL Server 2022 CU1 og SQL Server 2019 CU19).

  • Der opstår en adgangsfejl, hvis UDF-definitionen kun indeholder GOTO etiketter og enRETURN sætning (tilføjet i SQL Server 2022 CU1 og SQL Server 2019 CU19).

  • Skalar UDF returnerer resultater i forskellige dato- og klokkeslætsformater, når funktionen Scalar UDF Inlining er slået til (tilføjet i SQL Server 2022 CU3 og SQL Server 2019 CU20).

  • Der genereres en dumpfil, hvis en forespørgsel, der har en GROUP BY -delsætning, bruger indbyggede UDF'er i en SELECT -sætning uden en aggregeringsfunktion (tilføjet i SQL Server 2022 CU12 og SQL Server 2019 CU26).

  • Fejlen "Maksimal lagret procedure, funktion, udløser eller visning af indlejringsniveau overskredet (grænse 32)" opstår, hvis funktionen Scalar UDF Inlining er aktiveret, selvom indlejringsniveauet ikke er overskredet (tilføjet i SQL Server 2022 CU12 og SQL Server 2019 CU26).

  • Beskadigelse af hukommelse forekommer i sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf , hvis funktionen Scalar UDF Inlining er slået til (tilføjet i SQL Server 2022 CU12 og SQL Server 2019 CU26).

Denne kumulative opdatering blokerer også inlining i følgende scenarier:

  • Hvis UDF refererer til visse indbyggede funktioner (f.eks. @@ROWCOUNT), der kan ændre resultaterne, når UDF indsættes (tilføjet i SQL Server 2019 CU2).

  • Når aggregeringsfunktioner overføres som parametre til en skalar UDF (tilføjet i SQL Server 2019 CU2).

  • Hvis UDF refererer til indbyggede visninger (f.eks. OBJECT_ID) (tilføjet i SQL Server 2019 CU2).

  • Hvis UDF bruger XML-metoder (tilføjet i SQL Server 2019 CU4).

  • Hvis UDF indeholder en SELECTsætning, der brugerORDER BY-delsætningen, men ikke TOP 1(tilføjet i SQL Server 2019 CU4).

  • Hvis sætningenSELECT udfører en opgave sammen med ORDER BY -delsætningen (f.eks. SELECT @x = @x +1 FROM table ORDER BY column_name) (tilføjet i SQL Server 2019 CU4).

  • Hvis UDF indeholder flere RETURN sætninger (tilføjet i SQL Server 2019 CU5).

  • Hvis UDF kaldes fra en RETURN sætning (tilføjet i SQL Server 2019 CU5).

  • Hvis UDF refererer til funktionen STRING_AGG (tilføjet i SQL Server 2019 CU5).

  • Hvis UDF-definitionen refererer til eksterne tabeller (tilføjet i SQL Server 2019 CU6).

  • Hvis forespørgslen UDF-kald bruger GROUPING SETS, CUBEeller ROLLUP (tilføjet i SQL Server 2019 CU6).

  • Hvis forespørgslen UDF-kald indeholder en variabel, der bruges som en UDF-parameter til tildeling (f.eks. SELECT @y=2, @x=UDF(@y)) (tilføjet i SQL Server 2019 CU6).

  • Hvis UDF refererer til krypterede kolonner (tilføjet i SQL Server 2019 CU11).

  • Hvis UDF indeholder referencer til WITH XMLNAMESPACES(tilføjet i SQL Server 2019 CU11).

  • Hvis den forespørgsel, der aktiveres af UDF, har CTE'er (Common Table Expressions) (tilføjet i SQL Server 2019 CU11).

  • Hvis UDF-definitionen indeholder midlertidige tabeller eller synonymer for midlertidige tabeller (tilføjet i SQL Server 2022 CU1 og SQL Server 2019 CU19).

  • Hvis UDF-definitionen har enSELECTsætning sammen med enDISTINCT-delsætning på flere tildelingskolonner (tilføjet i SQL Server 2022 CU4 og SQL Server 2019 CU20).

  • Hvis UDF indeholder en SELECT sætning, der bruger TABLESAMPLE PERCENT -delsætningen og flere variable tildelinger (tilføjet i SQL Server 2022 CU7).

  • Hvis der findes en INSERT -forespørgsel i en tabel, der refereres til i en indekseret visning, der indeholder en UDF (tilføjet i SQL Server 2022 CU12 og SQL Server 2019 CU26).

Når du har opgraderet til SQL Server 2019 CU2, men før du opgraderer til SQL Server 2019 CU5, skal du igen evaluere, om en UDF er berettiget til inlining. Det gør du ved at opdatere berettigede skalar-UDF'er ved hjælp af en af følgende metoder:

  • Kør sp_refreshsqlmodule for relevante skalar-UDF'er. Du kan få mere at vide om denne systemlagrede procedure i sp_refreshsqlmodule (Transact-SQL).

  • Du kan ændre eller genoprette den eksisterende skalar UDF ved hjælp af eksisterende definitioner, tilladelser og angive egenskaber. Du kan få mere at vide under ALTER FUNCTION (Transact-SQL).

Følgende kommando genererer et script for at opdatere metadataene for alle eksisterende skalar-UDF'er:

/*

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

Bemærk! Når du har opgraderet til SQL Server 2019 CU5, fortsætter vi automatisk med at udlede UDF-inlineability under kompilering.

Løsning

Dette problem er rettet i følgende kumulative opdateringer til SQL Server:

Hver ny samlet opdatering til SQL Server indeholder alle de hotfixes og alle de sikkerhedsrettelser, der var inkluderet i den tidligere akkumulerede opdatering. Se de seneste kumulative opdateringer til SQL Server:

Status

Microsoft har bekræftet, at dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".

Referencer

Få mere at vide om den terminologi , som Microsoft bruger til at beskrive softwareopdateringer.

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.

Communities hjælper dig med at stille og besvare spørgsmål, give feedback og høre fra eksperter med omfattende viden.

Var disse oplysninger nyttige?

Hvor tilfreds er du med kvaliteten af sproget?
Hvad påvirkede din oplevelse?
Når du trykker på Send, bliver din feedback brugt til at forbedre Microsoft-produkter og -tjenester. Din it-administrator kan indsamle disse data. Erklæring om beskyttelse af personlige oplysninger.

Tak for din feedback!

×