Prijavite se pomoću Microsoft naloga
Prijavite se ili kreirajte nalog.
Zdravo,
Izaberite drugi nalog.
Imate više naloga
Odaberite nalog pomoću kojeg želite da se prijavite.

Simptome

User-Defined funkcije (UDF-ove) koje se primenjuju u Transact-SQL i koje vraćaju jednu vrednost podataka poznate su kao T-SQL Scalar User-Defined Funkcije (UDF-ove). 

Microsoft SQL Server 2019 je uveo funkciju "Scalar UDF inlining". Ova funkcija može da poboljša performanse upita koji pozivaju T-SQL Scalar UDF-ove, u kojima je UDF izvršavanje glavno usko grlo. T-SQL Scalar UDF umetanje automatski transformiše nelinearne UDF-ove u relacione izraze. 

Ova kumulativna ispravka uključuje nekoliko ispravki u sledećim oblastima za scenarije u kojima upit koji koristi Scalar UDF inlining može da vrati grešku ili neočekivane rezultate:

  • Greška nepodudaranja tipova se pojavljuje ako je povratni tip UDF-a sql_variant (dodat u SQL Server 2019 CU2).

  • UDF pozivanje izsp_executesql obustavljene izvršavanje (dodato u SQL Server 2019 CU2).

  • UDF datoteke koje upućuju na oznake bez povezane GOTO vraćaju netačne rezultate (dodate u SQL Server 2019 CU2).

  • Nema dovoljno memorije i curenja memorije dolazi zbog veoma velikih UDF-SQL Server 2019.

  • Nepokrenute promenljive koje se koriste u izrazima uslova (IF-ELSE) uzrokuju greške (dodate u SQL Server 2019 CU2).

  • Do eksplicitne greške pri konverziji dolazi ako UDF ima sql_variantparametar (dodat u programu SQL Server 2019 CU7).

  • Greška se javlja kada niska funkcija upućuje na CHECKSUM(dodato u programu SQL Server 2019 CU7).

  • UDF pozivanje koje ima veliki broj ponovnih procena u obliku skarlarnog izraza može dovesti do greške planer koji se ne daje (dodato u SQL Server 2019 CU7).

    Napomena: Popravka ovog problema ponekad može da izazove regresiju performansi. Da biste umanjili regresiju performansi, možete onemogućiti originalnu ispravku tako što ćete uključiti zastavicu za praćenje (TF) 13156.

    Microsoft radi na rešenju za regresiju performansi koje će biti dostupne u budućim cu.

  • Greška se javlja kada UDF referencični upit koristi OPTION (RECOMPILE)(dodat u programu SQL Server 2019 CU7).

  • Greške u dozvolama se javljaju kada prikazi pozivaju ugrađene UDF-ove (dodate u SQL Server 2019 CU9).

  • Kršenja pravila pristupa se javljajuquery_tsql_scalar_udf_inlinedse koristi XEvent (dodat u programu SQL Server 2019 CU9).

  • Do nedoslednog ponašanja dolazi zbog toga što niska UDF referenca ne poštuje QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_npredlog upita (dodat u programu SQL Server 2019 CU9).

  • UDF-ove koji se ulizuju sadrže agregacije koje mogu dovesti do grešaka u planeru koji se ne daje (dodato u programu SQL Server 2019 CU9).

  • Do grešaka sa nedostupnom memorijom dolazi zbog niza skalarnih operacija na istoj promenljivoj u uslovnim blokovima (dodato u SQL Server 2019 CU9).

  • Kršenje pristupa se javlja kada objekat poziva scalar neposredni UDF (UDF1) koji ima scalar neposredni UDF (UDF2) koji se koristi kao ulazni parametar nakon nadogradnje na CU9 (dodat u SQL Server 2019 CU11).

  • Upisivanje UDF-ova može dovesti do grešaka i generisati kodove grešaka 6846, 1011 i 107 (dodate u programu SQL Server 2019 CU11).

  • Ako umetnete UDF-ove koji se pokreću kao nalog koji nije sysadmin, možda ćete vratiti poruku o grešci "Došlo je do ozbiljne greške na trenutnoj komandi.  Rezultati bi, ako ih ima, trebalo odbaciti" (dodati u SQL Server CU16 2019).

  • Kršenje pristupa se javlja kada se privremene tabele pozivaju unutar UDF-ova pomoću sinonima (dodatih u Programu Microsoft SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Do kršenja pravila pristupa dolazi ako UDF definicija sadrži samo GOTO oznake iRETURN izjavu (dodate u SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Scalar UDF daje rezultate u različitim formatima datuma i vremena kada je omogućena funkcija za podešavanje Scalar UDF-a (dodata u programima SQL Server 2022 CU3 i SQL Server 2019 CU20).

Ova kumulativna ispravka takođe blokira upisivanje u sledeće scenarije:

  • Ako UDF upućuje na određene interne funkcije (na primer @@ROWCOUNT) koje mogu da izmene rezultate kada su navedeni (dodati u programu SQL Server 2019 CU2).

  • Kada se agregatne funkcije prosleđuju kao parametri u skupi UDF (dodati u SQL Server 2019 CU2).

  • Ako UDF upućuje na ugrađene prikaze (na primer: OBJECT_ID) (dodato u programu SQL Server 2019 CU2).

  • Ako UDF koristi XML metode (dodat u programu SQL Server 2019 CU4).

  • Ako UDF sadrži izraz SELECTkoji koristi odredbuORDER BY, ali ne i TOP 1(dodat u SQL Server 2019 CU4).

  • AkoSELECT izvršava zadatak zajedno sa odredbom ORDER BY (na primer, SELECT @x = @x +1 FROM table ORDER BY column_name) (dodata u SQL Server 2019 CU4).

  • Ako UDF sadrži više instrukcija RETURN (dodato u SQL Server 2019 CU5).

  • Ako se UDF poziva iz RETURN (dodat u SQL Server 2019 CU5).

  • Ako UDF upućuje na funkciju STRING_AGG (dodato u programu SQL Server 2019 CU5).

  • Ako definicija UDF-a upućuje na udaljene tabele (dodate u SQL Server 2019 CU6).

  • Ako upit za UDF pozivanje koristi GROUPING SETS, CUBEili ROLLUP (dodat u programu SQL Server 2019 CU6).

  • Ako upit za UDF pozivanje sadrži promenljivu koja se koristi kao UDF parametar za dodelu (na primer, SELECT @y=2, @x=UDF(@y)) (dodato u programu SQL Server 2019 CU6).

  • Ako UDF upućuje na šifrovane kolone (dodate u SQL Server 2019 CU11).

  • Ako UDF sadrži reference za WITH XMLNAMESPACES(dodato u SQL Server 2019 CU11).

  • Ako upit koji poziva UDF ima uobičajene izraze tabele (CTE) (dodat u SQL Server 2019 CU11).

  • Ako UDF definicija sadrži privremene tabele ili sinonime za privremene tabele (dodate u programu SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Ako UDF definicija imaSELECTizraz zajedno saDISTINCTodredbom u više kolona sa dodelom (dodata u verzijama SQL Server 2022 CU4 i SQL Server 2019 CU20).

Kada izvršite nadogradnju na SQL Server 2019 CU2, ali pre nadogradnje na SQL Server 2019 CU5, trebalo bi ponovo da proverite da li UDF ispunjava uslove za usmeravanje. Da biste to uradili, osvežite UDF-ove koji ispunjavaju uslove putem bilo kojih od sledećih metoda:

  • Pokrenite sp_refreshsqlmodule za primenljive UDF-ove. Više informacija o ovoj uskladištenoj proceduri sistema potražite u članku sp_refreshsqlmodule (Transact-SQL).

  • Izmenite ili ponovo kreirajte postojeći UDF u obliku scalara pomoću postojećih definicija, dozvola i postavljanja svojstava. Više informacija potražite u članku ALTER FUNCTION (Transact-SQL).

Sledeća komanda generiše skriptu da bi osvežila metapodatke postojećih uvučenih uDF-ove:

/*

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

Napomena: Kada izvršite nadogradnju na SQL Server CU5 2019, automatski ćemo ponovo izvedeni umetnutost UDF-a tokom prevođenja.

Rezoluciju

Ovaj problem je rešen u sledećim kumulativnim ispravkama za SQL Server:

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".

Reference

Saznajte više o terminologiji koju Microsoft koristi za opisivanja softverskih ispravki.

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.

Da li su vam ove informacije koristile?

Koliko ste zadovoljni kvalitetom jezika?
Šta je uticalo na vaše iskustvo?

Hvala vam na povratnim informacijama!

×