PATAISYMAS: Skaliarinė UDF Inlining "SQL Server 2019" problemos


Hotfix and Security Content Publishing: 113551

Simptomai

Vartotojo apibrėžtos funkcijos (UDF), įdiegtos Transact-SQL ir kad pateikti vieną duomenų reikšmę nurodyta kaip T-SQL Skaliarinė Vartotojo apibrėžtos funkcijos (UDF).

"Microsoft SQL Server" 2019 pristato Skaliarinę UDF Funkcija inlining, kuri gali pagerinti užklausų, kurios iškviečia "T-SQL", veikimą Skaliarinė UDFs, kur UDF vykdymas yra pagrindinė kliūtimi. "T-SQL" Skaliarinė UDF Inlining automatiškai transformuoja nesusietas UDF į sąryšines išraiškas.

Šiame kaupiamajame naujinime yra keletas pataisų situacijų, kuriose užklausa, naudojanti Skaliarinę UDF Inlining, sritis gali klaidos arba netikėtų rezultatų grąžinimas:

  • Tipo neatitikimo klaida Jei UDF grąžinimo tipas yra sql_variant (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • UDF iškvietimas iš sp_executesql abortų vykdymo (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • UDFs nurodo žymes be susietos GOTO komandos grąžina neteisingus rezultatus (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • Laisvos atminties sąlygos ir atminties nutekėjimas įvyksta dėl labai didelės Skaliarinės UDFs (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • Neinicijuoti kintamieji, naudojami sąlygoje (IF – ELSE) pareiškimai sukelia klaidų (įtraukta į "Microsoft SQL Server" 2019 CU2)

Šis Kaupiamasis naujinys taip pat blokuoja šiuos scenarijus:

  • Jei UDF nurodo tam tikras vidines funkcijas (pvz., @ @ROWCOUNT), kurios gali pakeisti rezultatus, kai yra nepadengta (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • Kai agregavimo funkcijos perduodamos kaip parametrai skaliarinio UDF (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • Jei UDF nurodo įtaisytuosius rodinius (pvz.: OBJECT_ID) (įtraukta į "Microsoft SQL Server" 2019 CU2)

  • Jei UDF naudoja XML metodus (įtraukta į "Microsoft SQL Server" 2019 CU4)

  • Jei UDF yra pasirinkite užsakymas pagal be "TOP 1" (įtraukta į "Microsoft SQL Server" 2019 CU4)

  • Jei pasirinkimo užklausa atlieka užduotį kartu su sąlyga ORDER BY (pvz., pasirinkite @x = @x + 1 iš lentelės tvarkos column_name) (įtraukta į "Microsoft SQL Server" 2019 CU4)

  • Jei UDF turi kelis grąžinimo teiginius (įtraukta į "Microsoft SQL Server" 2019 CU5)

  • Jei UDF iškviesta iš grąžinimo išrašo (įtraukta į "Microsoft SQL Server" 2019 CU5)

  • Jei UDF nurodo STRING_AGG funkciją (įtraukta į "Microsoft SQL Server" 2019 CU5)

  • Jei UDF aprašo nuorodos nuotoliniai stalai (pridėta "Microsoft SQL Server" 2019 CU6)

  • Jei UDF – skambinimo užklausa naudoja GRUPAVIMO rinkinius, KUBĄ arba apibendrinimo (įtraukta į "Microsoft SQL Server" 2019 CU6)

  • Jei UDF – skambinimo užklausoje yra kintamasis, kuris naudojamas kaip UDF priskyrimo parametras (pvz., pasirinkite @y = 2, @x = UDF (@y)) (pridėta "Microsoft SQL Server" 2019 CU6)

Atnaujinę į "Microsoft SQL Server" 2019 CU2, bet prieš naujindami į "CU5", turite iš naujo įvertinti , ar UDF yra galima naudoti "inlining". Norėdami tai padaryti, atnaujinkite reikalavimus atitinkančios skaliarinio UDF per vieną iš toliau nurodyti būdai.

  • Atlikite sp_refreshsqlmodule taikytiniems skaliariniams UDFs (žiūrėkite sp_refreshsqlmodule (Transact-SQL) , kad sužinotumėte apie šią sistemos saugomą procedūrą)

  • Keisti arba iš naujo sukurkite esamą Skaliarinę UDF naudodami esamą aprašą, teises ir ypatybių nustatymas (žiūrėkite keisti FUNKCIJA (Transact-SQL))

Toliau pateiktas scenarijus sugeneruoja scenarijų, skirtą esamiems neliniuotų skaliarinio UDFs metaduomenims atnaujinti:

/*

Generuoja scenarijų, kurį galima naudoti norint atnaujinti visą aktyvų integruotą Skaliarinę UDF.

Pastaba: sp_refreshsqlmodule neturi įtakos jokioms teisėms, išplėstoms ypatybėms,

arba NUSTATYKITE parinktis, susijusias su objektu.

*/

PASIRINKITE VYKDYTI sys. sp_refreshsqlmodule "[' + OBJECT_SCHEMA_NAME (object_id) + + ']." + "[' + OBJECT_NAME (object_id)

+ ']'';' KAIP "papildomas sakinys"

IŠ sys. sql_modules

KUR is_inlineable = 1

IR inline_type = 1;

EITI

Pastaba. Po to, kai versijos naujinimas į "Microsoft SQL Server" 2019 CU5, automatiškai atsiras UDF galimybė kompiliuoti iš naujo.

Statusą

"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.

Sprendimas

Ši problema išspręsta šį kaupiamąjį naujinimą SQL Server:

Apie SQL serverio kaupiamieji naujinimai:

Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio kaupiamojo naujinimo. Peržiūrėkite naujausius kaupiamuosius SQL serverio naujinimus:

Nuorodos

Sužinokite apie terminologiją, kurią "Microsoft" naudoja programinės įrangos naujinimams apibūdinti.

Bug Information:

KE: v-madora

Author: 

Writer: v-madora

Tech reviewer: kwpark; tmichael

Editor: v-idsun

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×