Labojums: skalāras UDF uzoderes problēmas SQL Server 2019


Hotfix and Security Content Publishing: 113551

Simptomi

Lietotāja definētas funkcijas (UDF), kas ir implementētas Transact-SQL un tas, ka tiek atgriezta viena datu vērtība, tiek dēvēta par T-SQL skalāru Lietotāja definētas funkcijas (UDF).

Microsoft SQL Server 2019 iepazīstina ar skalāro UDF Pasvītrojuma līdzeklis, kas var uzlabot vaicājumu, kas izsauc T-SQL, veiktspēju Skalārs UDF, kur ir galvenā vājā vieta. T-SQL Skalārais UDF uzraksts automātiski transformē strukturētu UDF par relāciju izteiksmēm.

Šajā kumulatīvajā atjauninājumā ir vairāki labojumi visā tālāk norādītajos apgabalos, kur vaicājums, kas izmanto skalāru UDF uzsvītrojumu, var tiek parādīts kļūdas ziņojums vai neparedzēti rezultāti:

  • Tipa neatbilstības kļūda, ja UDF atdošanas tips ir sql_variant (pievienota Microsoft SQL Server 2019 CU2)

  • UDF uzaicinājums no sp_executesql pārtrauc izpildi (pievienots Microsoft SQL Server 2019 CU2)

  • UDF atsauču etiķetes, neizmantojot saistītu GOTO komandu atgriešanu nepareizus rezultātus (pievienots programmā Microsoft SQL Server 2019 CU2)

  • Ir ļoti liels skalārs UDF (pievienots programmā Microsoft SQL Server 2019 CU2) , kas neietilpst atmiņā, un atmiņas noplūdes.

  • Stāvoklī lietoti neinicializēti mainīgie (ja-ELSE) priekšraksti izraisa kļūdas (pievienotas Microsoft SQL Server 2019 CU2)

Šī kumulatīvā vērtība atjaunināšanas līdzeklis tiek bloķēts arī tālāk norādītajos scenārijos.

  • Ja UDF norāda noteiktas raksturīgas funkcijas (piemēram, @ @ROWCOUNT), kas var mainīt rezultātu, ja ir iezīmēts (pievienots programmā Microsoft SQL Server 2019 CU2)

  • Ja kopsavilkuma funkcijas tiek nodotas kā parametri skalārā UDF (pievienota Microsoft SQL Server 2019 CU2)

  • Ja UDF atsauces iebūvētie skati (piemēram: OBJECT_ID) (pievienots programmā Microsoft SQL Server 2019 CU2)

  • Ja UDF izmanto XML metodes (pievienotas Microsoft SQL Server 2019 CU4)

  • Ja UDF ietilpst atlase ar pasūtījumu, neizmantojot "TOP 1" (pievienota Microsoft SQL Server 2019 CU4)

  • Ja atlases vaicājums izpilda uzdevumu kopā ar klauzulu ORDER BY (piemēram, atlasiet @x = @x + 1 no tabulu secības column_name) (pievienots programmā Microsoft SQL Server 2019 CU4)

  • Ja UDF ir vairāki atgriešanu paziņojumi (pievienoti Microsoft SQL Server 2019 VV5)

  • Ja UDF sauc no atdošanas priekšraksta (pievienots Microsoft SQL Server 2019 VV5)

  • Ja UDF atsaucas uz funkciju STRING_AGG (pievienota Microsoft SQL Server 2019 VV5)

  • Ja UDF definīcijā ir atsauces uz attālajām tabulām (pievienotas Microsoft SQL Server 2019 CU6)

  • Ja UDF zvana vaicājumā tiek izmantotas GRUPĒŠANAs, kuba vai APKOPOJUMa (pievienots Microsoft SQL Server 2019 CU6)

  • Ja UDF zvana vaicājumā ir mainīgais, kas tiek izmantots kā Uzdevuma UDF parametrs (piemēram, atlasiet @y = 2, @x = UDF (@y)) (pievienots Microsoft SQL Server 2019 CU6)

Pēc jaunināšanas uz Microsoft SQL Server 2019 CU2, bet pirms jaunināšanas uz VV5, ir atkārtoti jāizvērtē , vai UDF ir piemērots pasvītrojumam. Lai to izdarītu, atsvaidziniet atbilstošo skalāro UDF, izmantojot kādu no tālāk norādītajām tālāk norādītās metodes.

  • Lai iegūtu detalizētu informāciju par šo sistēmas saglabāto procedūru, izpildiet sp_refreshsqlmodule sp_refreshsqlmodule.

  • Mainīt vai atkārtoti izveidojiet esošo skalāro UDF, izmantojot esošās definīcijas, atļaujas un iestatīt rekvizītus (skatiet ALTER FUNKCIJA (Transact-SQL))

Šis skripts ģenerē skriptu, ar kuru tiek atsvaidzināti esošie ar iezīmētiem skalārajiem UDF metadati:

/*

Izveido skriptu, ko var izmantot, lai atsvaidzinātu visus aktīvos iezīmētos skalāros UDF.

Piezīme. sp_refreshsqlmodule neietekmē nekādas atļaujas, paplašinātos rekvizītus

vai iestatīt ar objektu saistītās opcijas.

*/

ATLASIET IZPILDĪT sys. sp_refreshsqlmodule ' ' [' + OBJECT_SCHEMA_NAME (object_id) + + ']. ' + ' [' + OBJECT_NAME (object_id)

+ ']'';' KĀ ' RefreshStatement '

NO sys. sql_modules

KUR is_inlineable = 1

UN inline_type = 1;

IET

Piezīme. Pēc tam, kad esat jauniniet uz Microsoft SQL Server 2019 VV5, mēs automātiski Izpildīsim UDF jauna kompilēšana.

Statusa

Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".

Risinājums

Šī problēma ir novērsta šajā SQL Server kumulatīvajā atjauninājumā:

Par kumulatīvajiem SQL Server atjauninājumiem:

Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:

Atsauces

Uzziniet par terminoloģiju, ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.

Bug Information:

KE: v-madora

Author: 

Writer: v-madora

Tech reviewer: kwpark; tmichael

Editor: v-idsun

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka jums varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta speciālistiem.

×