Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

FIX: le plan de requête pour une procédure stockée n'est pas en cache si la variable est utilisée dans une fonction de la chaîne de Microsoft SQL Server 2008 et que la procédure stockée utilise une variable d'objet BLOB

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 2380435
Microsoft distribue les correctifs de Microsoft SQL Server 2008 en tant qu'un fichier téléchargeable unique. Étant donné que les correctifs sont cumulatifs, chaque nouvelle version contient tous les correctifs et tous les correctifs de la sécurité qui ont été inclus avec la précédente SQL Server 2008 résout version.
Symptômes
Envisagez le scénario suivant :
  • Vous créez une procédure stockée dans Microsoft SQL Server 2008.
  • La procédure stockée utilise une variable d'objet binaire volumineux (BLOB).
  • BLOB de la variable est utilisée dans une fonction de chaîne.
  • Vous exécutez la procédure stockée.
Dans ce scénario, le plan de requête pour la procédure stockée n'est pas mis en cache.
Résolution

SQL Server 2008 Service Pack 1

Le correctif de ce problème a été tout d'abord publié 10 de mise à jour cumulative pour SQL Server 2008 Service Pack 1. Pour plus d'informations sur ce package cumulatif de mise à jour, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
2279604Mettre à jour cumulative 10 de SQL Server 2008 Service Pack 1 de package
RemarqueCar les versions sont le correctif cumulatif, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus avec la précédente de SQL Server 2008 version du correctif. Microsoft vous recommande d'envisager l'application de la version du correctif plus récente qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
970365Le SQL Server 2008 builds qui ont été publiés après la publication de SQL Server 2008 Service Pack 1
Correctifs Microsoft SQL Server 2008 sont créés pour les service packs de SQL Server spécifiques. Vous devez appliquer un correctif SQL Server 2008 Service Pack 1 pour une installation de SQL Server 2008 Service Pack 1. Par défaut, n'importe quel correctif fourni dans un service pack SQL Server est inclus dans le prochain service pack SQL Server.
Statut
Microsoft a confirmé qu'il s'agit d'un problème dans les produits Microsoft répertoriés dans la section «S'applique à».
Plus d'informations
Pour reproduire ce problème, procédez comme suit :
  1. Code exécution ce qui suit pour créer deux procédures stockées («p_test1» et «p_test2»). «P_test1» utilise une variable d'objet BLOB et «p_test2» utilise une variable nvarchar(100).
    use tempdbgoif OBJECT_ID('p_test1') is not null drop proc p_test1if OBJECT_ID('p_test2') is not null drop proc p_test2gocreate proc p_test1@s nvarchar(max)asbeginselect * from sys.objects where name = UPPER(@s)endgocreate proc p_test2@s nvarchar(100)asbeginselect * from sys.objects where name = UPPER(@s)endgo
  2. Exécuter le code suivant pour effacer le cache de procédure et pour exécuter les deux procédures stockées :
    dbcc freeproccachegoexec p_test1 N'abc'exec p_test2 N'abc'go
  3. Exécuter le code suivant pour vérifier le plan mis en cache :
    select object_name(CONVERT(int, a.value)), cp.*from sys.dm_exec_cached_plans cpcross apply sys.dm_exec_plan_attributes(cp.plan_handle) awhere cp.objtype = 'Proc'and a.attribute = 'objectid'
RemarqueS'il y a plusieurs exécutions simultanées de ce type de procédure stockée sur une instance de Microsoft SQL Server 2008, vous pouvez rencontrer le blocage qui est provoqué par les verrous de compilation dans l'instance.

Pour plus d'informations sur la description de SQL Server de blocage provoqué par les verrous de compilation, consultez l'article suivant de la base de connaissances Microsoft :
263889Description de SQL Server de blocage provoqué par compiler des verrous
Références
Pour plus d'informations sur les fonctions String (Transact-SQL), visitez le site Web Microsoft suivant :Pour plus d'informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
935897Un modèle de service incrémentiel est disponible à partir de l'équipe SQL Server pour fournir des correctifs pour les problèmes signalés
Pour plus d'informations sur le schéma d'affectation de noms pour les mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
822499Nouveau schéma d'affectation de noms pour les logiciels de Microsoft SQL Server des packages de mises à jour
Pour plus d'informations sur la terminologie de mise à jour de logiciel, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
824684 de laDescription de la terminologie standard utilisée pour décrire les mises à jour de logiciel Microsoft

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 2380435 - Dernière mise à jour : 09/21/2010 20:23:00 - Révision : 1.0

Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Standard Edition for Small Business, Microsoft SQL Server 2008 Workgroup

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2380435 KbMtfr
Commentaires