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). 

Microsoft SQL Server 2019 a introduit la fonctionnalité d’inlining UDF scalaire. 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 principal goulot d’étranglement. T-SQL Scalar UDF Inlining transforme automatiquement les UDF inlineables en expressions relationnelles. 

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

  • Erreur d’incompatibilité de type 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_executesql abandonne l’exécution (ajouté dans SQL Server 2019 CU2)

  • Les fonctions définies par l’utilisateur référençant 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)

  • Erreur de conversion explicite si la fonction UDF a le paramètre sql_variant(ajouté dans SQL Server 2019 CU7)

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

  • L’appel de la fonction UDF avec un grand nombre de réévaluations d’expressions scalaires peut entraîner 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 lorsque la requête de référencement UDF utilise OPTION (RECOMPILE)(ajoutée dans SQL Server 2019 CU7)

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

  • Des violations d’accès se produisent lors de l’utilisation du query_tsql_scalar_udf_inlinedXEvent (ajouté dans SQL Server 2019 CU9)

  • Comportement incohérent en raison de l’inlining UDF scalaire ne respectant pas l’indicateur de requête QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(ajouté dans SQL Server 2019 CU9)

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

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

  • Une violation d’accès peut se produire lorsqu’un objet appelle une fonction UDF1 scalaire avec une fonction UDF2 (UDF2) scalaire utilisée comme paramètre d’entrée après la mise à niveau vers CU9 (ajoutée dans SQL Server 2019 CU11)

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

  • L’incorporation des fonctions définies par l’utilisateur en tant que compte non sysadmin peut générer l’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 lorsque des tables temporaires sont appelées dans 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)

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) qui peuvent modifier les résultats lorsqu’elle est insérée (ajoutée dans SQL Server 2019 CU2)

  • Quand 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ée 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 SELECTavec ORDER BYet sans TOP 1(ajoutée dans SQL Server CU4 2019)

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

  • 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 définie par l’utilisateur 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 appelant une fonction définie par l’utilisateur 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 CU11 2019)

  • Si la définition de la fonction définie par l’utilisateur contient des tables temporaires ou des synonymes pour les tables temporaires (ajoutées dans SQL Server 2022 CU1 et SQL Server 2019 CU19)

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 des fonctions définies par l’utilisateur scalaires 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 allons dériver automatiquement l’inlineabilité 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 ?

Développez vos compétences

Découvrez des formations >

Accédez aux nouvelles fonctionnalités en avant-première

REJOINDRE MICROSOFT 365 INSIDERS >

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 ?

Nous vous remercions de vos commentaires.

×