Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Symptômes

les fonctions User-Defined (UDF) implémentées dans Transact-SQL et qui retournent une seule valeur de données sont appelées fonctions scalaires T-SQL User-Defined (UDF). 

La fonctionnalité Scalar UDF Inlining a été introduite dans Microsoft SQL Server 2019. Cette fonctionnalité peut améliorer les performances des requêtes qui appellent des fonctions définies par l’utilisateur scalaires T-SQL dans lesquelles l’exécution de la fonction UDF est le main goulot d’étranglement. T-SQL Scalar UDF Inlining transforme automatiquement les UDF inlineables en expressions relationnelles. 

Cette mise à jour cumulative (CU) inclut plusieurs correctifs dans les domaines suivants pour les scénarios dans lesquels une requête qui utilise l’inlining UDF scalaire peut retourner un message d’erreur ou des résultats inattendus :

  • Une erreur d’incompatibilité de type se produit si le type de retour de la fonction définie par l’utilisateur est un sql_variant (ajouté dans SQL Server 2019 CU2).

  • L’appel de la fonction UDF à partir desp_executesqlannule l’exécution (ajouté dans SQL Server 2019 CU2).

  • Les fonctions définies par l’utilisateur qui référencent des étiquettes sans commande GOTO associée retournent des résultats incorrects (ajoutés dans SQL Server 2019 CU2).

  • Les conditions de mémoire insuffisante et les fuites de mémoire se produisent en raison de très grandes fonctions définies par l’utilisateur scalaires (ajoutées dans SQL Server 2019 CU2).

  • Les variables non initialisées utilisées dans les instructions condition (IF-ELSE) provoquent des erreurs (ajoutées dans SQL Server 2019 CU2).

  • Une erreur de conversion explicite se produit si une fonction définie par l’utilisateur a le paramètre sql_variant(ajouté dans SQL Server 2019 CU7).

  • Une erreur se produit si la fonction scalaire fait référence à CHECKSUM(ajoutée dans SQL Server 2019 CU7).

  • L’appel de la fonction UDF qui a de nombreuses réévaluations d’expressions scalaires peut provoquer une erreur de planification sans rendement (ajoutée dans SQL Server 2019 CU7).

    Remarque : Le correctif de ce problème peut parfois entraîner une régression des performances. Pour atténuer cette régression des performances, vous pouvez désactiver le correctif d’origine en activant l’indicateur de trace (TF) 13156.

    Microsoft travaille sur un correctif pour cette régression des performances qui sera disponible dans une prochaine cu.

  • Une erreur se produit si la requête de référencement UDF utilise OPTION (RECOMPILE)(ajoutée dans SQL Server CU7 2019).

  • Des erreurs d’autorisation se produisent si les vues appellent des fonctions définies par l’utilisateur insérées (ajoutées dans SQL Server CU9 2019).

  • Des violations d’accès se produisent si lequery_tsql_scalar_udf_inlinedXEvent est utilisé (ajouté dans SQL Server CU9 2019).

  • Un comportement incohérent se produit car l’inlining UDF scalaire ne respecte pas l’indicateur de requête QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(ajouté dans SQL Server CU9 2019).

  • Les fonctions définies par l’utilisateur inlining contiennent des agrégations qui peuvent entraîner des erreurs de planificateur sans rendement (ajoutées dans SQL Server CU9 2019).

  • Des erreurs de mémoire insuffisante se produisent en raison d’une séquence d’opérations scalaires sur la même variable dans des blocs conditionnels (ajoutée dans SQL Server 2019 CU9).

  • Après la mise à niveau vers CU9, une violation d’accès se produit si un objet appelle une fonction UDF1 (UDF1) scalaire qui a une fonction UDF2 (UDF2) scalaire utilisée comme paramètre d’entrée (ajouté dans SQL Server CU11 2019).

  • L’incorporation des fonctions définies par l’utilisateur peut entraîner des erreurs et générer des codes d’erreur 6846, 1011 et 107 (ajoutés dans SQL Server 2019 CU11).

  • L’incorporation des fonctions définies par l’utilisateur qui s’exécutent en tant que compte non-sysadmin peut renvoyer le message d’erreur « Une erreur grave s’est produite sur la commande actuelle.  Les résultats, le cas échéant, doivent être ignorés » (ajouté dans SQL Server CU16 2019).

  • Une violation d’accès se produit si des tables temporaires sont appelées à l’intérieur des fonctions définies par l’utilisateur à l’aide de synonymes (ajoutés dans Microsoft SQL Server 2022 CU1 et SQL Server 2019 CU19).

  • Une violation d’accès se produit si la définition de la fonction définie par l’utilisateur contient uniquement des étiquettes GOTO et une instructionRETURN (ajoutée dans SQL Server 2022 CU1 et SQL Server CU19 2019).

  • La fonction UDF scalaire retourne les résultats dans des formats de date et d’heure différents lorsque la fonctionnalité d’incorporation de fonctions UDF scalaires est activée (ajoutée dans SQL Server 2022 CU3 et SQL Server 2019 CU20).

  • Un fichier de vidage est généré si une requête qui a une clause GROUP BY utilise des fonctions définies par l’utilisateur inline dans une instruction SELECT sans fonction d’agrégation (ajoutée dans SQL Server 2022 CU12 et SQL Server CU26 2019).

  • L’erreur « Le niveau maximal d’imbrication de la procédure stockée, de la fonction, du déclencheur ou de la vue est dépassé (limite 32) » se produit si la fonctionnalité d’incorporation de fonctions UDF scalaires est activée, même si le niveau d’imbrication n’est pas dépassé (ajoutée dans SQL Server 2022 CU12 et SQL Server CU26 2019).

  • Une altération de la mémoire se produit dans sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf si la fonctionnalité d’inlinage des fonctions UDF scalaires est activée (ajoutée dans SQL Server CU12 2022 et SQL Server 2019 CU26).

Cette mise à jour cumulative bloque également l’incorporation dans les scénarios suivants :

  • Si la fonction UDF fait référence à certaines fonctions intrinsèques (par exemple, @@ROWCOUNT), cela peut modifier les résultats lorsque la fonction définie par l’utilisateur est insérée (ajoutée dans SQL Server 2019 CU2).

  • Lorsque les fonctions d’agrégation sont passées en tant que paramètres à une fonction définie par l’utilisateur scalaire (ajoutée dans SQL Server 2019 CU2).

  • Si la fonction UDF fait référence à des vues intégrées (par exemple : OBJECT_ID) (ajoutées dans SQL Server 2019 CU2).

  • Si la fonction définie par l’utilisateur utilise des méthodes XML (ajoutées dans SQL Server 2019 CU4).

  • Si la fonction définie par l’utilisateur contient une instruction SELECTqui utilise la clauseORDER BYmais pas TOP 1(ajoutée dans SQL Server 2019 CU4).

  • Si l’instructionSELECT effectue une affectation avec la clause ORDER BY (par exemple, SELECT @x = @x +1 FROM table ORDER BY column_name) (ajoutée dans SQL Server 2019 CU4).

  • Si la fonction UDF contient plusieurs instructions RETURN (ajoutées dans SQL Server 2019 CU5).

  • Si la fonction UDF est appelée à partir d’une instruction RETURN (ajoutée dans SQL Server 2019 CU5).

  • Si la fonction UDF fait référence à la fonction STRING_AGG (ajoutée dans SQL Server 2019 CU5).

  • Si la définition de la fonction UDF fait référence à des tables distantes (ajoutées dans SQL Server 2019 CU6).

  • Si la requête appelant une fonction définie par l’utilisateur utilise GROUPING SETS, CUBEou ROLLUP (ajoutée dans SQL Server 2019 CU6).

  • Si la requête uDF appelant contient une variable utilisée comme paramètre UDF pour l’affectation (par exemple, SELECT @y=2, @x=UDF(@y)) (ajoutée dans SQL Server 2019 CU6).

  • Si la fonction UDF référence des colonnes chiffrées (ajoutée dans SQL Server CU11 2019).

  • Si la fonction définie par l’utilisateur contient des références à WITH XMLNAMESPACES(ajoutée dans SQL Server 2019 CU11).

  • Si la requête appelant la fonction définie par l’utilisateur comporte des expressions de table communes (CTE) (ajoutées dans SQL Server 2019 CU11).

  • Si la définition UDF contient des tables temporaires ou des synonymes pour les tables temporaires (ajoutées dans SQL Server 2022 CU1 et SQL Server 2019 CU19).

  • Si la définition UDF a une instructionSELECTavec une clauseDISTINCTsur plusieurs colonnes d’affectation (ajoutées dans SQL Server 2022 CU4 et SQL Server 2019 CU20).

  • Si la fonction UDF contient une instruction SELECT qui utilise la clause TABLESAMPLE PERCENT et plusieurs affectations de variables (ajoutées dans SQL Server 2022 CU7).

  • Si une requête INSERT existe sur une table référencée par une vue indexée qui contient une fonction définie par l’utilisateur (ajoutée dans SQL Server 2022 CU12 et SQL Server 2019 CU26).

Après avoir effectué la mise à niveau vers SQL Server 2019 CU2, mais avant de procéder à la mise à niveau vers SQL Server 2019 CU5, vous devez réévaluer si une fonction définie par l’utilisateur est éligible à l’incorporation. Pour ce faire, actualisez les UDF scalaires éligibles à l’aide de l’une des méthodes suivantes :

  • Exécutez sp_refreshsqlmodule pour les fonctions définies par l’utilisateur scalaires applicables. Pour plus d’informations sur cette procédure stockée système, consultez sp_refreshsqlmodule (Transact-SQL).

  • Modifiez ou recréez la fonction définie par l’utilisateur scalaire existante à l’aide de définitions, d’autorisations et de propriétés de définition existantes. Pour plus d’informations, consultez ALTER FUNCTION (Transact-SQL).

La commande suivante génère un script pour actualiser les métadonnées de toutes les fonctions UDF scalaires inline existantes :

/*

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

Remarque : Après la mise à niveau vers SQL Server CU5 2019, nous reprendrons automatiquement la dérivation de la fonction UDF pendant la compilation.

Résolution

Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

État

Microsoft a confirmé l’existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×