Message d’erreur lorsque vous essayez d’enregistrer une table dans SQL Server : « l’enregistrement des modifications n’est pas autorisée »

S’applique à : SQL Server 2008 ExpressSQL Server 2008 Express with Advanced ServicesSQL Server 2008 Standard

Symptômes


Lorsque vous utilisez le langage de définition de données (DDL) pour modifier une table et puis vous essayez d’enregistrer la table dans Microsoft SQL Server 2008, le message suivant s’affiche :

L’enregistrement des modifications n’est pas autorisée. Les modifications que vous avez effectuées nécessitent des tableaux suivants pour être supprimée et recréée. Vous avez apporté les modifications apportées à une table qui ne peut pas être recréée ou activé l’option empêcher l’enregistrement des modifications qui requièrent la table d’être recréée.

Cause


Ce problème se produit lorsque l’option empêcher l’enregistrement de modifications qui nécessitent la recréation de la table est activée et que vous effectuez une ou plusieurs des modifications suivantes à la table :
  • Vous modifiez le paramètre Autoriser les valeurs NULL pour une colonne.
  • Vous réorganisez les colonnes de la table.
  • Vous modifiez le type de données de la colonne.
  • Vous ajoutez une nouvelle colonne.
Lorsque vous modifiez une table afin que vous modifiez la structure de métadonnées de la table, et puis que vous enregistrez la table, la table doit être en recréée en fonction de ces modifications. Cela peut entraîner la perte de métadonnées et une perte directe de données lors de la recréation de la table. Si vous activez l’option empêcher l’enregistrement de modifications qui nécessitent la recréation de la table dans la section Concepteur de la fenêtre Options de SQL Server Management Studio (SSMS) , vous recevez le message d’erreur qui est mentionné dans la section « Symptômes ».

Solution de contournement


Pour contourner ce problème, utilisez les instructions Transact-SQL pour effectuer les modifications à la structure d’une table de métadonnées. Pour plus d’informations, reportez-vous à la rubrique suivante dans la documentation en ligne de SQL Server :

http://msdn.microsoft.com/en-us/library/ms190273.aspx

Par exemple, pour modifier la colonne MyDate de type datetime dans la table appelée MyTable afin d'accepter les valeurs NULL vous pouvez utiliser:

alter table MyTable alter column MyDate7 datetime NULL

Important Nous recommandons fortement de ne pas contourner ce problème en désactivant l'option empêcher l'enregistrement de modifications qui nécessitent la recréation de table . Pour plus d’informations sur les risques liés à la désactivation de cette option, consultez la section « Informations complémentaires ».

État


Microsoft a confirmé qu'il s'agissait d'un bogue dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations


Pour modifier l’option empêcher l’enregistrement de modifications qui nécessitent la recréation de la table , procédez comme suit :
  1. Ouvrez SQL Server Management Studio (SSMS).
  2. Dans le menu Outils, cliquez sur Options
  3. Dans le volet de navigation de la fenêtre Options, cliquez sur Concepteurs.
  4. Activez ou désactivez la case à cocher empêcher l’enregistrement de modifications qui nécessitent la recréation de la table , puis cliquez sur OK.
Remarque Si vous désactivez cette option, vous n’êtes pas averti lorsque vous enregistrez la table les modifications que vous avez apportées ont changé la structure de métadonnées de la table. Dans ce cas, la perte de données peut se produire lorsque vous enregistrez la table.

Risque de désactiver l’option « Empêcher l’enregistrement de modifications qui nécessitent une recréation de table »

Bien que la désactivation de cette option peut vous aider à éviter de recréer une table, cela peut également mener à la perte des modifications. Par exemple, supposons que vous activez la fonctionnalité "suivi des modifications" dans SQL Server 2008 pour suivre les modifications apportées à la table. Lorsque vous effectuez une opération causant une re-création de la table, vous recevez le message d'erreur mentionné dans la section « Symptômes ». Toutefois, si vous désactivez cette option, le suivi des informations de modifications existant est supprimé lorsque la table est recréée. Par conséquent, nous recommandons que vous n’utilisez pas ce problème en désactivant l’option.

Pour déterminer si la fonctionnalité suivi des modifications est activée pour une table, procédez comme suit :
  1. Dans SQL Server Management Studio, localisez la table dans l’Explorateur d’objets.
  2. Avec le bouton droit de la table, puis cliquez sur Propriétés.
  3. Dans la boîte de dialogue Propriétés du tableau , cliquez sur Suivi des modifications.
Si la valeur de l’élément Suivi des modifications est True, cette option est activée pour la table. Si la valeur est False, cette option est désactivée.

Lorsque la fonctionnalité de suivi de modification est activée, utilisez les instructions Transact-SQL pour modifier la structure de métadonnées de la table.

Procédure pour reproduire le problème

  1. Dans SQL Server Management Studio, créez une table contenant une clé primaire dans l’outil Concepteur de tables.
  2. Avec le bouton droit de la base de données qui contient cette table, puis cliquez sur Propriétés.
  3. Dans la boîte de dialogue Propriétés de la base de données , cliquez sur Suivi des modifications.
  4. La valeur de l’élément Suivi des modifications de la valeur true, puis cliquez sur OK.
  5. Avec le bouton droit de la table, puis cliquez sur Propriétés.
  6. Dans la boîte de dialogue Propriétés du tableau , cliquez sur Suivi des modifications.
  7. La valeur de l’élément Suivi des modifications de la valeur true, puis cliquez sur OK.
  8. Dans le menu Outils, cliquez sur Options
  9. Dans la boîte de dialogue Options , cliquez sur les concepteurs.
  10. Activez la case à cocher empêcher l’enregistrement de modifications qui nécessitent la recréation de table , puis cliquez sur OK.
  11. Dans l’outil Concepteur de tables, modifiez le paramètre Autoriser les valeurs NULL dans une colonne existante.
  12. Essayez d’enregistrer la modification apportée à la table.