Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Problembeschreibung

User-Defined-Funktionen (UDFs), die in Transact-SQL implementiert sind und einen einzelnen Datenwert zurückgeben, werden als T-SQL-skalare User-Defined-Funktionen (UDFs) bezeichnet. 

Das Inliningfeature für skalare UDF wurde in Microsoft SQL Server 2019 eingeführt. Dieses Feature kann die Leistung von Abfragen verbessern, die T-SQL-skalare UDFs aufrufen, bei denen die UDF-Ausführung der Standard Engpass ist. T-SQL Scalar UDF Inlining transformiert inlineable UDFs automatisch in relationale Ausdrücke. 

Dieses kumulative Update (CU) enthält mehrere Korrekturen in den folgenden Bereichen für Szenarien, in denen eine Abfrage, die skalare UDF-Inlining verwendet, möglicherweise eine Fehlermeldung oder unerwartete Ergebnisse zurückgibt:

  • Typkonfliktfehler tritt auf, wenn der Rückgabetyp der UDF ein sql_variant ist (hinzugefügt in SQL Server 2019 CU2).

  • Der UDF-Aufruf vonsp_executesqlbricht die Ausführung ab (hinzugefügt in SQL Server 2019 CU2).

  • UDFs, die auf Bezeichnungen ohne zugeordneten GOTO Befehl verweisen, geben falsche Ergebnisse zurück (hinzugefügt in SQL Server 2019 CU2).

  • Nicht genügend Arbeitsspeicher und Speicherverluste treten aufgrund sehr großer skalarer UDFs auf (hinzugefügt in SQL Server 2019 CU2).

  • Nicht initialisierte Variablen, die in Bedingungsanweisungen (IF-ELSE) verwendet werden, verursachen Fehler (hinzugefügt in SQL Server 2019 CU2).

  • Expliziter Konvertierungsfehler tritt auf, wenn eine UDF über den parameter sql_variantverfügt (hinzugefügt in SQL Server 2019 CU7).

  • Fehler tritt auf, wenn die Skalarfunktion auf CHECKSUMverweist (hinzugefügt in SQL Server 2019 CU7).

  • Ein UDF-Aufruf mit vielen neuauswertungen von Skalarausdrücken kann zu einem Nicht-Ergebnis-Planerfehler führen (hinzugefügt in SQL Server 2019 CU7).

    Hinweis: Die Behebung dieses Problems kann manchmal zu einer Leistungsregression führen. Um diese Leistungsregression zu verringern, können Sie die ursprüngliche Korrektur deaktivieren, indem Sie das Ablaufverfolgungsflag (TF) 13156 aktivieren.

    Microsoft arbeitet an einer Korrektur für diese Leistungsregression, die in einem zukünftigen CU verfügbar sein wird.

  • Ein Fehler tritt auf, wenn die UDF-Referenzabfrage OPTION (RECOMPILE)(hinzugefügt in SQL Server 2019 CU7) verwendet.

  • Berechtigungsfehler treten auf, wenn Ansichten inlineierte UDFs aufrufen (hinzugefügt in SQL Server 2019 CU9).

  • Zugriffsverletzungen treten auf, wenn dasquery_tsql_scalar_udf_inlinedXEvent verwendet wird (hinzugefügt in SQL Server 2019 CU9).

  • Ein inkonsistentes Verhalten tritt auf, weil das Inlining der skalaren UDF den QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nAbfragehinweis (hinzugefügt in SQL Server 2019 CU9) nicht berücksichtigt.

  • Inlining-UDFs enthalten Aggregationen, die zu Nicht-Yield-Schedulerfehlern führen können (hinzugefügt in SQL Server 2019 CU9).

  • Fehler mit nicht genügend Arbeitsspeicher treten aufgrund einer Sequenz von Skalarvorgängen für dieselbe Variable in bedingten Blöcken auf (hinzugefügt in SQL Server 2019 CU9).

  • Nach dem Upgrade auf CU9 tritt eine Zugriffsverletzung auf, wenn ein Objekt eine skalare inlineierbare UDF (UDF1) aufruft, die über eine skalare inlineierbare UDF (UDF2) verfügt, die als Eingabeparameter verwendet wird (hinzugefügt in SQL Server 2019 CU11).

  • Das Inlining von UDFs kann Fehler verursachen und fehlercodes 6846, 1011 und 107 generieren (hinzugefügt in SQL Server 2019 CU11).

  • Das Inlining von UDFs, die als nicht sysadmin-Konto ausgeführt werden, gibt möglicherweise die Fehlermeldung zurück: "Beim aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten.  Die Ergebnisse, falls vorhanden, sollten verworfen werden" (hinzugefügt in SQL Server 2019 CU16).

  • Eine Zugriffsverletzung tritt auf, wenn temporäre Tabellen in UDFs mithilfe von Synonymen aufgerufen werden (hinzugefügt in Microsoft SQL Server 2022 CU1 und SQL Server 2019 CU19).

  • Eine Zugriffsverletzung tritt auf, wenn die UDF-Definition nur GOTO Bezeichnungen und eineRETURN -Anweisung enthält (hinzugefügt in SQL Server 2022 CU1 und SQL Server 2019 CU19).

  • Skalare UDF gibt Ergebnisse in unterschiedlichen Datums- und Uhrzeitformaten zurück, wenn das Inliningfeature für skalare UDF aktiviert ist (hinzugefügt in SQL Server 2022 CU3 und SQL Server 2019 CU20).

  • Eine Speicherabbilddatei wird generiert, wenn eine Abfrage mit einer GROUP BY -Klausel Inline-UDFs in einer SELECT -Anweisung ohne Aggregatfunktion verwendet (hinzugefügt in SQL Server 2022 CU12 und SQL Server 2019 CU26).

  • Der Fehler "Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32)" (Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32)" tritt auf, wenn das Feature "Scalar UDF Inlining" aktiviert ist, auch wenn die Schachtelungsebene nicht überschritten wird (hinzugefügt in SQL Server 2022 CU12 und SQL Server 2019 CU26).

  • Speicherbeschädigung tritt in sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf auf, wenn das Feature Inlining für skalare UDF aktiviert ist (hinzugefügt in SQL Server 2022 CU12 und SQL Server 2019 CU26).

Dieses kumulative Update blockiert auch das Inlining in den folgenden Szenarien:

  • Wenn die UDF auf bestimmte systeminterne Funktionen verweist (z. B. @@ROWCOUNT), die die Ergebnisse ändern können, wenn die UDF inline ist (in SQL Server 2019 CU2 hinzugefügt).

  • Wenn Aggregatfunktionen als Parameter an eine skalare UDF übergeben werden (hinzugefügt in SQL Server 2019 CU2).

  • Wenn die UDF auf integrierte Ansichten verweist (z. B. OBJECT_ID) (hinzugefügt in SQL Server 2019 CU2).

  • Wenn die UDF XML-Methoden verwendet (hinzugefügt in SQL Server 2019 CU4).

  • Wenn die UDF eine SELECT-Anweisung enthält, die dieORDER BY-Klausel verwendet, aber nicht TOP 1(hinzugefügt in SQL Server 2019 CU4).

  • Wenn dieSELECT -Anweisung eine Zuweisung zusammen mit der ORDER BY -Klausel ausführt (z. B. SELECT @x = @x +1 FROM table ORDER BY column_name) (hinzugefügt in SQL Server 2019 CU4).

  • Wenn die UDF mehrere RETURN -Anweisungen enthält (hinzugefügt in SQL Server 2019 CU5).

  • Wenn die UDF aus einer RETURN -Anweisung aufgerufen wird (hinzugefügt in SQL Server 2019 CU5).

  • Wenn die UDF auf die funktion STRING_AGG verweist (hinzugefügt in SQL Server 2019 CU5).

  • Wenn die UDF-Definition auf Remotetabellen verweist (hinzugefügt in SQL Server 2019 CU6).

  • Wenn die UDF-aufrufende Abfrage GROUPING SETS, CUBEoder ROLLUP (hinzugefügt in SQL Server 2019 CU6) verwendet.

  • Wenn die UDF-aufrufende Abfrage eine Variable enthält, die als UDF-Parameter für die Zuweisung verwendet wird (z. B. SELECT @y=2, @x=UDF(@y)) (hinzugefügt in SQL Server 2019 CU6).

  • Wenn die UDF auf verschlüsselte Spalten verweist (hinzugefügt in SQL Server 2019 CU11).

  • Wenn die UDF Verweise auf WITH XMLNAMESPACESenthält (hinzugefügt in SQL Server 2019 CU11).

  • Wenn die Abfrage, die die UDF aufruft, über allgemeine Tabellenausdrücke (Common Table Expressions, CTEs) verfügt (hinzugefügt in SQL Server 2019 CU11).

  • Wenn die UDF-Definition temporäre Tabellen oder Synonyme für temporäre Tabellen enthält (hinzugefügt in SQL Server 2022 CU1 und SQL Server 2019 CU19).

  • Wenn die UDF-Definition eineSELECT-Anweisung zusammen mit einerDISTINCT-Klausel für mehrere Zuweisungsspalten enthält (hinzugefügt in SQL Server 2022 CU4 und SQL Server 2019 CU20).

  • Wenn die UDF eine SELECT -Anweisung enthält, die die TABLESAMPLE PERCENT -Klausel und mehrere Variablenzuweisungen (hinzugefügt in SQL Server 2022 CU7) verwendet.

  • Wenn eine INSERT Abfrage für eine Tabelle vorhanden ist, auf die von einer indizierten Sicht verwiesen wird, die eine UDF enthält (hinzugefügt in SQL Server 2022 CU12 und SQL Server 2019 CU26).

Nach dem Upgrade auf SQL Server 2019 CU2, aber vor dem Upgrade auf SQL Server 2019 CU5 sollten Sie erneut bewerten, ob eine UDF für inlining geeignet ist. Aktualisieren Sie hierzu berechtigte benutzerdefinierte Skalarfunktionen mithilfe einer der folgenden Methoden:

Der folgende Befehl generiert ein Skript, um die Metadaten aller vorhandenen inlined skalaren UDFs zu aktualisieren:

/*

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

Hinweis: Nach dem Upgrade auf SQL Server 2019 CU5 wird die Ableitung der UDF-Inlinefähigkeit während der Kompilierung automatisch fortgesetzt.

Lösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Informationsquellen

Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×