Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Symptomy

User-Defined Funkcje (UDF), które są implementowane w języku Transact-SQL i zwracające pojedynczą wartość danych, są nazywane funkcjami Skalarny User-Defined języka T-SQL (UDF). 

Funkcja Scalar UDF Inlining została wprowadzona w microsoft SQL Server 2019. Ta funkcja może zwiększyć wydajność zapytań wywołujących pliki UDF skalarnego języka T-SQL, w których wykonanie UDF jest głównym wąskim gardłem. Funkcja T-SQL Scalar UDF Inlining automatycznie przekształca wbudowane pliki UDF w wyrażenia relacyjne. 

Ta aktualizacja zbiorcza (CU) zawiera kilka poprawek w następujących obszarach w scenariuszach, w których zapytanie używające funkcji scalarnego UDF Inlining może zwrócić komunikat o błędzie lub nieoczekiwane wyniki:

  • Błąd niezgodności typu występuje, jeśli zwracany typ funkcji UDF jest sql_variant (dodano w SQL Server 2019 CU2).

  • Wywołanie UDF zsp_executesqlanuluje wykonanie (dodane w SQL Server 2019 CU2).

  • Pliki UDF odwołują się do etykiet bez skojarzonego polecenia GOTO zwracają niepoprawne wyniki (dodane w SQL Server 2019 CU2).

  • Warunki braku pamięci i przecieki pamięci występują z powodu bardzo dużych skalarnych plików UDF (dodanych w SQL Server 2019 CU2).

  • Niezainicjowane zmienne używane w instrukcjach warunkowych (IF-ELSE) powodują błędy (dodane w SQL Server 2019 CU2).

  • Jawny błąd konwersji występuje, jeśli UDF ma parametr sql_variant(dodany w SQL Server 2019 CU7).

  • Błąd występuje, jeśli odwołania do funkcji skalarnych CHECKSUM(dodane w SQL Server 2019 CU7).

  • Wywołanie funkcji UDF, które ma wiele ponownych ocen wyrażeń skalarnych, może spowodować błąd harmonogramu o niezgodności z wydajnością (dodany w SQL Server 2019 CU7).

    Uwaga: rozwiązanie tego problemu może czasami powodować regresję wydajności. Aby ograniczyć regresję wydajności, można wyłączyć pierwotną poprawkę, włączając flagę śledzenia (TF) 13156.

    Firma Microsoft pracuje nad rozwiązaniem tego regresji wydajności, które będzie dostępne w przyszłej wersji cu.

  • Błąd występuje, jeśli zapytanie odwołujące się do usługi UDF używa OPTION (RECOMPILE)(dodane w SQL Server 2019 CU7).

  • Błędy uprawnień występują, jeśli widoki wywoływają wbudowane pliki UDF (dodane w SQL Server 2019 CU9).

  • Naruszenia dostępu występują, jeśli jest używanequery_tsql_scalar_udf_inlinedXEvent (dodane w SQL Server 2019 CU9).

  • Niespójne zachowanie występuje, ponieważ scalarna formuła UDF Inlining nie uwzględnia QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nwskazówki zapytania (dodano ją w SQL Server 2019 CU9).

  • Uwypukliwanie plików UDF zawiera agregacje, które mogą powodować nieprzychylone błędy harmonogramu (dodane w SQL Server 2019 CU9).

  • Błędy braku pamięci występują z powodu sekwencji operacji skalarnych na tej samej zmiennej w blokach warunkowych (dodanych w SQL Server 2019 CU9).

  • Po uaktualnieniu do cu9 występuje naruszenie dostępu, jeśli obiekt wywołuje skalarny uDF (UDF1) skalarny, który ma skalarny uDF (UDF2) skalarny, który jest używany jako parametr wejściowy (dodany w SQL Server 2019 CU11).

  • Podkreślenie plików UDF może powodować błędy i generować kody błędów 6846, 1011 i 107 (dodane w SQL Server 2019 CU11).

  • Podkreślenie plików UDF uruchamianych jako konto inne niż sysadmin może spowodować zwrócenie komunikatu o błędzie "W bieżącym poleceniu wystąpił poważny błąd.  Wyniki, jeśli istnieją, powinny zostać odrzucone" (dodane w SQL Server 2019 CU16).

  • Naruszenie dostępu występuje, jeśli tabele tymczasowe są wywoływane wewnątrz plików UDF przy użyciu synonimów (dodane w microsoft SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Naruszenie zasad dostępu występuje, jeśli definicja UDF zawiera tylko etykiety GOTO i instrukcjęRETURN (dodano w SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Skalarny format UDF zwraca wyniki w różnych formatach daty i godziny po włączeniu funkcji Scalar UDF Inlining (dodano ją w SQL Server 2022 CU3 i SQL Server 2019 CU20).

  • Plik zrzutu jest generowany, jeśli zapytanie zawierające klauzulę GROUP BY używa wbudowanych plików UDF w instrukcji SELECT bez funkcji agregacji (dodano w SQL Server 2022 CU12 i SQL Server 2019 CU26).

  • Błąd "Maksymalna procedura składowana, funkcja, wyzwalacz lub poziom zagnieżdżania widoku został przekroczony (limit 32)" występuje, jeśli funkcja scalarnego zagnieżdżania UDF jest włączona, nawet jeśli poziom zagnieżdżenia nie został przekroczony (dodano w SQL Server 2022 CU12 i SQL Server 2019 CU26).

  • Uszkodzenie pamięci występuje w sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf , jeśli funkcja Scalar UDF Inlining jest włączona (dodano ją w SQL Server 2022 CU12 i SQL Server 2019 CU26).

Ta aktualizacja zbiorcza blokuje również podkreślenie w następujących scenariuszach:

  • Jeśli funkcja UDF odwołuje się do niektórych funkcji wewnętrznych (na przykład @@ROWCOUNT), które mogą zmienić wyniki po wpisaniu UDF (dodane w SQL Server 2019 CU2).

  • Gdy funkcje agregujące są przekazywane jako parametry do skalarnego UDF (dodane w SQL Server 2019 CU2).

  • Jeśli funkcja UDF odwołuje się do widoków wbudowanych (na przykład: OBJECT_ID) (dodane w SQL Server 2019 CU2).

  • Jeśli plik UDF korzysta z metod XML (dodanych w SQL Server 2019 CU4).

  • Jeśli UDF zawiera instrukcję SELECT, która używa klauzuliORDER BY, ale nie TOP 1(dodano w SQL Server 2019 CU4).

  • Jeśli instrukcjaSELECT wykonuje przydział wraz z klauzulą ORDER BY (na przykład SELECT @x = @x +1 FROM table ORDER BY column_name) (dodano w SQL Server 2019 CU4).

  • Jeśli UDF zawiera wiele instrukcji RETURN (dodanych w SQL Server 2019 CU5).

  • Jeśli funkcja UDF jest wywoływana z instrukcji RETURN (dodano ją w SQL Server 2019 CU5).

  • Jeśli funkcja UDF odwołuje się do funkcji STRING_AGG (dodano ją w SQL Server 2019 CU5).

  • Jeśli definicja UDF odwołuje się do tabel zdalnych (dodanych w SQL Server 2019 CU6).

  • Jeśli zapytanie wywołujące usługi UDF używa GROUPING SETS, CUBElub ROLLUP (dodane w SQL Server 2019 CU6).

  • Jeśli zapytanie wywołujące UDF zawiera zmienną używaną jako parametr UDF dla przydziału (na przykład SELECT @y=2, @x=UDF(@y)) (dodana w SQL Server 2019 CU6).

  • Jeśli funkcja UDF odwołuje się do zaszyfrowanych kolumn (dodanych w SQL Server 2019 CU11).

  • Jeśli UDF zawiera odwołania do WITH XMLNAMESPACES(dodane w SQL Server 2019 CU11).

  • Jeśli zapytanie wywołujące UDF ma typowe wyrażenia tabeli (CTE) (dodane w SQL Server 2019 CU11).

  • Jeśli definicja UDF zawiera tabele tymczasowe lub synonimy tabel tymczasowych (dodane w SQL Server 2022 CU1 i SQL Server 2019 CU19).

  • Jeśli definicja UDF zawiera instrukcjęSELECTwraz z klauzuląDISTINCTw wielu kolumnach przydziałów (dodano w SQL Server 2022 CU4 i SQL Server 2019 CU20).

  • Jeśli funkcja UDF zawiera instrukcję SELECT używającą klauzuli TABLESAMPLE PERCENT i wielu zmiennych przydziałów (dodanych w SQL Server 2022 CU7).

  • Jeśli w tabeli, do której odwołuje się widok indeksowany, znajduje się zapytanie INSERT , które zawiera rekordY UDF (dodane w SQL Server 2022 CU12 i SQL Server 2019 CU26).

Po uaktualnieniu do SQL Server 2019 CU2, ale przed uaktualnieniem do SQL Server 2019 CU5 należy ponownie ocenić, czy UDF kwalifikuje się do podkreślenia. Aby to zrobić, odśwież kwalifikujące się skalarne pliki UDF za pomocą jednej z następujących metod:

  • Uruchom sp_refreshsqlmodule dla odpowiednich skalarnych plików UDF. Aby uzyskać więcej informacji o tej procedurze składowanej systemu, zobacz sp_refreshsqlmodule (Transact-SQL).

  • Zmień lub ponownie utwórz istniejący skalarny plik UDF przy użyciu istniejących definicji, uprawnień i właściwości. Aby uzyskać więcej informacji, zobacz ALTER FUNCTION (Transact-SQL).

Następujące polecenie generuje skrypt odświeżania metadanych istniejących wbudowanych plików UDF skalarnych:

/*

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

Uwaga: Po uaktualnieniu do SQL Server 2019 CU5 wznowimy automatyczne wyprowadzanie funkcji UDF inlineability podczas kompilacji.

Rozwiązanie

Ten problem został rozwiązany w następujących aktualizacjach zbiorczych dla SQL Server:

Każda nowa aktualizacja zbiorcza dla SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla SQL Server:

Stan

Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".

Informacje

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×