Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

Symptomen

User-Defined Functions (UDF's) die zijn geïmplementeerd in Transact-SQL en die één gegevenswaarde retourneren, worden T-SQL Scalar User-Defined Functions (UDF's) genoemd. 

De functie Scalar UDF Inlining is geïntroduceerd in Microsoft SQL Server 2019. Deze functie kan de prestaties verbeteren van query's die T-SQL Scalar UDF's aanroepen, waarbij UDF-uitvoering het belangrijkste knelpunt is. T-SQL Scalar UDF Inlining transformeert automatisch inlineeerbare UDF's in relationele expressies. 

Deze cumulatieve update (CU) bevat verschillende oplossingen voor de volgende gebieden voor scenario's waarin een query die gebruikmaakt van Scalar UDF Inlining een foutbericht of onverwachte resultaten kan retourneren:

  • De fout type komt niet overeen als het retourtype van de UDF een sql_variant is (toegevoegd in SQL Server 2019 CU2).

  • UDF-aanroep vanuitsp_executesqlannuleert de uitvoering (toegevoegd in SQL Server 2019 CU2).

  • UDF's die verwijzen naar labels zonder een bijbehorende GOTO opdracht retourneren onjuiste resultaten (toegevoegd in SQL Server 2019 CU2).

  • Onvoldoende geheugenomstandigheden en geheugenlekken treden op vanwege zeer grote scalaire UDF's (toegevoegd in SQL Server 2019 CU2).

  • Niet-geïnitialiseerde variabelen die worden gebruikt in voorwaardeinstructies (IF-ELSE) veroorzaken fouten (toegevoegd in SQL Server 2019 CU2).

  • Er treedt een expliciete conversiefout op als een UDF de parameter sql_variantheeft (toegevoegd in SQL Server 2019 CU7).

  • Er treedt een fout op als de scalaire functie verwijst naar CHECKSUM(toegevoegd in SQL Server 2019 CU7).

  • UDF-aanroep met veel herevaluaties van scalaire expressies kan een niet-opleverende scheduler-fout veroorzaken (toegevoegd in SQL Server 2019 CU7).

    Opmerking: De oplossing voor dit probleem kan soms een prestatieregressie veroorzaken. Als u deze prestatieregressie wilt beperken, kunt u de oorspronkelijke oplossing uitschakelen door traceringsvlag (TF) 13156 in te schakelen.

    Microsoft werkt aan een oplossing voor deze prestatieregressie die beschikbaar zal zijn in een toekomstige CU.

  • De fout treedt op als de UDF-verwijzingsquery gebruikmaakt van OPTION (RECOMPILE)(toegevoegd in SQL Server 2019 CU7).

  • Machtigingsfouten treden op als weergaven inlined UDF's aanroepen (toegevoegd in SQL Server 2019 CU9).

  • Toegangsschendingen treden op als dequery_tsql_scalar_udf_inlinedXEvent wordt gebruikt (toegevoegd in SQL Server 2019 CU9).

  • Inconsistent gedrag treedt op omdat Scalar UDF Inlining de QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nqueryhint niet respecteert (toegevoegd in SQL Server 2019 CU9).

  • Inlining-UDF's bevatten aggregaties die niet-opleverende scheduler-fouten kunnen veroorzaken (toegevoegd in SQL Server 2019 CU9).

  • Fouten met onvoldoende geheugen treden op vanwege een reeks scalaire bewerkingen op dezelfde variabele in voorwaardelijke blokken (toegevoegd in SQL Server 2019 CU9).

  • Nadat u een upgrade naar CU9 hebt uitgevoerd, treedt er een toegangsfout op als een object een scalaire, niet-regelbare UDF (UDF1) aanroept met een scalaire, inlineeerbare UDF2 (UDF2) die wordt gebruikt als invoerparameter (toegevoegd in SQL Server 2019 CU11).

  • Het inlijnen van UDF's kan fouten veroorzaken en foutcodes 6846, 1011 en 107 genereren (toegevoegd in SQL Server 2019 CU11).

  • Bij het inlijnen van UDF's die worden uitgevoerd als het niet-sysadmin-account, kan het foutbericht 'Er is een ernstige fout opgetreden bij de huidige opdracht.  De resultaten, indien aanwezig, moeten worden verwijderd' (toegevoegd in SQL Server 2019 CU16).

  • Er treedt een toegangsfout op als tijdelijke tabellen worden aangeroepen in UDF's met behulp van synoniemen (toegevoegd in Microsoft SQL Server 2022 CU1 en SQL Server 2019 CU19).

  • Er treedt een toegangsfout op als de UDF-definitie alleen GOTO labels en eenRETURN -instructie bevat (toegevoegd in SQL Server 2022 CU1 en SQL Server 2019 CU19).

  • Scalar UDF retourneert resultaten in verschillende datum- en tijdnotaties wanneer de functie Scalar UDF Inlining is ingeschakeld (toegevoegd in SQL Server 2022 CU3 en SQL Server 2019 CU20).

  • Een dumpbestand wordt gegenereerd als een query met een GROUP BY -component inlined UDF's gebruikt in een SELECT -instructie zonder een statistische functie (toegevoegd in SQL Server 2022 CU12 en SQL Server 2019 CU26).

  • Fout 'Maximum opgeslagen procedure, functie, trigger of weergave van nestingsniveau overschreden (limiet 32)' treedt op als de functie Scalar UDF-inlining is ingeschakeld, zelfs als het nestniveau niet wordt overschreden (toegevoegd in SQL Server 2022 CU12 en SQL Server 2019 CU26).

  • Geheugenbeschadiging treedt op in sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf als de functie Scalar UDF Inlining is ingeschakeld (toegevoegd in SQL Server 2022 CU12 en SQL Server 2019 CU26).

Deze cumulatieve update blokkeert ook inlining in de volgende scenario's:

  • Als de UDF verwijst naar bepaalde intrinsieke functies (bijvoorbeeld @@ROWCOUNT) die de resultaten kunnen wijzigen wanneer de UDF is inlined (toegevoegd in SQL Server 2019 CU2).

  • Wanneer statistische functies als parameters worden doorgegeven aan een scalaire UDF (toegevoegd in SQL Server 2019 CU2).

  • Als de UDF verwijst naar ingebouwde weergaven (bijvoorbeeld: OBJECT_ID) (toegevoegd in SQL Server 2019 CU2).

  • Als de UDF XML-methoden gebruikt (toegevoegd in SQL Server 2019 CU4).

  • Als de UDF een SELECT-instructie bevat die gebruikmaakt van deORDER BY-component, maar niet TOP 1(toegevoegd in SQL Server 2019 CU4).

  • Als deSELECT -instructie een toewijzing uitvoert samen met de ORDER BY -component (bijvoorbeeld SELECT @x = @x +1 FROM table ORDER BY column_name) (toegevoegd in SQL Server 2019 CU4).

  • Als de UDF meerdere RETURN -instructies bevat (toegevoegd in SQL Server 2019 CU5).

  • Als de UDF wordt aangeroepen vanuit een RETURN -instructie (toegevoegd in SQL Server 2019 CU5).

  • Als de UDF verwijst naar de functie STRING_AGG (toegevoegd in SQL Server 2019 CU5).

  • Als de UDF-definitie verwijst naar externe tabellen (toegevoegd in SQL Server 2019 CU6).

  • Als de UDF-aanroepquery gebruikmaakt van GROUPING SETS, CUBEof ROLLUP (toegevoegd in SQL Server 2019 CU6).

  • Als de UDF-aanroepende query een variabele bevat die wordt gebruikt als een UDF-parameter voor toewijzing (bijvoorbeeld SELECT @y=2, @x=UDF(@y)) (toegevoegd in SQL Server 2019 CU6).

  • Als de UDF verwijst naar versleutelde kolommen (toegevoegd in SQL Server 2019 CU11).

  • Als de UDF verwijzingen bevat naar WITH XMLNAMESPACES(toegevoegd in SQL Server 2019 CU11).

  • Als de query die de UDF aanroept, Common Table Expressions (CTE's) heeft (toegevoegd in SQL Server 2019 CU11).

  • Als de UDF-definitie tijdelijke tabellen of synoniemen voor tijdelijke tabellen bevat (toegevoegd in SQL Server 2022 CU1 en SQL Server 2019 CU19).

  • Als de UDF-definitie eenSELECT-instructie bevat, samen met eenDISTINCT-component voor meerdere toewijzingskolommen (toegevoegd in SQL Server 2022 CU4 en SQL Server 2019 CU20).

  • Als de UDF een SELECT -instructie bevat die gebruikmaakt van de TABLESAMPLE PERCENT -component en meerdere variabeletoewijzingen (toegevoegd in SQL Server 2022 CU7).

  • Als er een INSERT query bestaat op een tabel waarnaar wordt verwezen door een geïndexeerde weergave die een UDF bevat (toegevoegd in SQL Server 2022 CU12 en SQL Server 2019 CU26).

Nadat u een upgrade hebt uitgevoerd naar SQL Server 2019 CU2, maar voordat u een upgrade uitvoert naar SQL Server 2019 CU5, moet u opnieuw evalueren of een UDF in aanmerking komt voor inlining. Hiervoor vernieuwt u in aanmerking komende scalaire UDF's via een van de volgende methoden:

  • Voer sp_refreshsqlmodule uit voor toepasselijke scalaire UDF's. Zie sp_refreshsqlmodule (Transact-SQL) voor meer informatie over deze door het systeem opgeslagen procedure.

  • Wijzig of maak de bestaande scalaire UDF opnieuw met behulp van bestaande definities, machtigingen en eigenschappen instellen. Zie ALTER FUNCTION (Transact-SQL) voor meer informatie.

Met de volgende opdracht wordt een script gegenereerd om de metagegevens van bestaande inlined scalaire UDF's te vernieuwen:

/*

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

Opmerking: nadat u een upgrade naar SQL Server 2019 CU5 hebt uitgevoerd, wordt tijdens de compilatie automatisch de inlineabiliteit van UDF hervat.

Oplossing

Dit probleem is opgelost in de volgende cumulatieve updates voor SQL Server:

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die zijn opgenomen in de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

Status

Microsoft heeft bevestigd dat dit een probleem is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Verwijzingen

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×