ÅTGÄRD: problem med skalär UDF i SQL Server 2019


Hotfix and Security Content Publishing: 113551

Symptom

Användardefinierade funktioner (användardefinierade funktioner) som implementeras i Transact-SQL och som returnerar ett data värde kallas T-SQL skalär Användardefinierade funktioner (användardefinierade funktioner).

Microsoft SQL Server 2019 introducerar den skalära UDF-filen Funktionen inskrivning som kan förbättra prestanda för frågor som anropar T-SQL Skalär användardefinierade funktioner, där UDF-körning är den huvudsakliga Flask halsen. T-SQL skalär UDF informerar automatiskt användardefinierade funktioner i Relations uttryck.

Den här kumulativa uppdateringen innehåller flera korrigeringar i följande områden för scenarier där en fråga som använder skalärfunktioner med skalär UDF-formatering kan returnera ett fel eller oväntade resultat:

  • Typ av fel format visas om UDF-filens returtyp är en sql_variant (lades till i Microsoft SQL Server 2019 CU2)

  • UDF-anrop från sp_executesql avbryta körning (lades till i Microsoft SQL Server 2019-CU2)

  • Användardefinierade funktioner som refererar till etiketter utan tillhör ande GOTO-kommando returnerar felaktiga resultat (lades till i Microsoft SQL Server 2019 CU2)

  • Slut på minnes förhållanden och minnes läckor beror på väldigt stora skalära användardefinierade funktioner (lades till i Microsoft SQL Server 2019 CU2)

  • Icke initierade variabler som används i villkor (om-ELSE) uttryck orsakar fel (lades till i Microsoft SQL Server 2019 CU2)

Den här kumulativa uppdatering blockerar även inskrivning i följande scenarier:

  • Om UDF-filen refererar till vissa inbyggda funktioner (till exempel @ @ROWCOUNT) som kan ändra resultatet när den är infogad (lades till i Microsoft SQL Server 2019 CU2)

  • När mängd funktioner överförs som parametrar till ett skalärt UDF (läggs till i Microsoft SQL Server 2019 CU2)

  • Om UDF-informationen refererar till inbyggda vyer (till exempel: OBJECT_ID) (lades till i Microsoft SQL Server 2019 CU2)

  • Om UDF-filen använder XML-metoder (läggs till i Microsoft SQL Server 2019 CU4)

  • Om UDF-filen innehåller ett SELECT med ORDER BY utan "TOP 1" (läggs till i Microsoft SQL Server 2019 CU4)

  • Om en URVALs fråga utför en tilldelning tillsammans med ORDER BY-satsen (Välj @x = @x + 1 från tabell ordning efter column_name) (lades till i Microsoft SQL Server 2019 CU4)

  • Om UDF-filen innehåller flera RETURN-instruktioner (lades till i Microsoft SQL Server 2019 CU5)

  • Om UDF-filen anropas från en RETURN-programsats (lades till i Microsoft SQL Server 2019 CU5)

  • Om UDF-filen refererar till STRING_AGG-funktionen (lades till i Microsoft SQL Server 2019 CU5)

  • Om UDF-definitionen refererar till fjär tabeller (tillagda i Microsoft SQL Server 2019 CU6)

  • Om en UDF-samtal-fråga använder GRUPPERINGar, kub eller sammanslagning (lades till i Microsoft SQL Server 2019 CU6)

  • Om den UDF-anropade frågan innehåller en variabel som används som en UDF-parameter för tilldelning (Välj till exempel @y = 2, @x = UDF (@y)) (lades till i Microsoft SQL Server 2019 CU6)

Efter att du har uppgraderat till Microsoft SQL Server 2019 CU2 men innan du uppgraderar till CU5, bör du utvärdera om en UDF är kvalificerat för att vara med. Det här kan du göra genom att uppdatera berättigade skalära användardefinierade funktioner via någon av följande sätt:

  • Kör sp_refreshsqlmodule för tillämpliga skalära användardefinierade funktioner (se sp_refreshsqlmodule (Transact-SQL) för information om den här system lagrade proceduren)

  • Ändra eller återskapa den befintliga skalär UDF-filen genom att använda befintlig definition, behörigheter och Ange egenskaper (se Alter FUNCTION (Transact-SQL))

Följande skript genererar ett skript för att uppdatera metadata för befintliga infogade skalära användardefinierade funktioner:

/*

Genererar ett skript som kan användas för att uppdatera alla aktiva, skalära skalärfunktioner Användardefinierade funktioner.

Obs! sp_refreshsqlmodule påverkar inga behörigheter, utökade egenskaper

eller ange alternativ som är kopplade till objektet.

*/

VÄLJ ' KÖR sys. sp_refreshsqlmodule ' ' [' + OBJECT_SCHEMA_NAME (object_id) + + ']. ' + ' [' + OBJECT_NAME (object_id)

+ ']'';' SOM "RefreshStatement"

FRÅN sys. sql_modules

DÄR is_inlineable = 1

OCH inline_type = 1;

ANVÄNDER

Obs! När du har uppgradera till Microsoft SQL Server 2019 CU5, kommer vi automatiskt att få UDF vid kompileringen.

Status

Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".

Lösning

Det här problemet är åtgärdat i den här kumulativa uppdateringen för SQL Server:

Om kumulativa uppdateringar för SQL Server:

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabb korrigeringar och alla säkerhets korrigeringar som ingick i den föregående kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:

Referenser

Lär dig mer om terminologinsom Microsoft använder för att beskriva program varu uppdateringar.

Bug Information:

KE: v-madora

Author: 

Writer: v-madora

Tech reviewer: kwpark; tmichael

Editor: v-idsun

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×