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

Traductions disponibles Traductions disponibles
Numéro d'article: 2380435 - Voir les produits auxquels s'applique cet article
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.
Agrandir tout | Réduire tout

Sommaire

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 tempdb
    go
    if OBJECT_ID('p_test1') is not null drop proc p_test1
    if OBJECT_ID('p_test2') is not null drop proc p_test2
    go
    create proc p_test1
    @s nvarchar(max)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    create proc p_test2
    @s nvarchar(100)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    
  2. Exécuter le code suivant pour effacer le cache de procédure et pour exécuter les deux procédures stockées :
    dbcc freeproccache
    go
    exec 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 cp
    cross apply sys.dm_exec_plan_attributes(cp.plan_handle) a
    where 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 :
Fonctions de chaîne (Transact-SQL)
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

Propriétés

Numéro d'article: 2380435 - Dernière mise à jour: mardi 21 septembre 2010 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2380435 KbMtfr
Traduction automatique
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
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com