Préambule
Je modifiais une colonne dans SQL Server 2008 aujourd'hui, en changeant le type de données de quelque chose comme la devise (18,0) en (19,2).
J'ai reçu l'erreur «Les modifications que vous avez apportées nécessitent que les tables suivantes soient supprimées et recréées» de SQL Server.
Avant de vous précipiter pour répondre, veuillez lire ce qui suit:
Je sais déjà qu'il existe une option dans Outils ► Options ► Concepteur ► Concepteurs de tables et de bases de données ► Décochez la case "Empêcher l'enregistrement des modifications qui nécessitent une recréation de table". ... alors ne répondez pas avec ça!
Question réelle
Ma vraie question est pour autre chose, comme suit:
Y a-t-il des effets négatifs / des inconvénients possibles à faire cela?
Le tableau est-il réellement supprimé et recréé automatiquement lorsque cette case n'est pas cochée?
Si oui, la table est-elle une réplique exacte à 100% de la table source?
la source
Réponses:
La table n'est supprimée et recréée que dans les cas où c'est la seule façon dont Management Studio de SQL Server a été programmé pour savoir comment le faire.
Il y a certainement des cas où il le fera quand il n'en aura pas besoin, mais il y aura aussi des cas où les modifications que vous apportez dans Management Studio ne seront pas supprimées et recréées car ce n'est pas nécessaire.
Le problème est qu'énumérer tous les cas et déterminer de quel côté de la ligne ils relèvent sera assez fastidieux.
C'est pourquoi j'aime utiliser
ALTER TABLE
dans une fenêtre de requête, au lieu des concepteurs visuels qui cachent ce qu'ils font (et très franchement ont des bugs) - je sais exactement ce qui va se passer, et je peux me préparer pour les cas où la seule possibilité consiste à supprimer et recréer la table (ce qui est un nombre inférieur à la fréquence à laquelle SSMS vous le fera).la source
Outils -> Options -> Noeud Designers -> Décochez " Empêcher l'enregistrement des modifications qui nécessitent une recréation de la table ".
la source
Référence - La désactivation de cette option peut vous aider à éviter de recréer une table, elle peut également entraîner la perte des modifications. Par exemple, supposons que vous activez la fonctionnalité de suivi des modifications dans SQL Server 2008 pour suivre les modifications apportées à la table. Lorsque vous effectuez une opération qui entraîne la recréation de la table, vous recevez le message d'erreur mentionné dans la section "Symptômes". Toutefois, si vous désactivez cette option, les informations de suivi des modifications existantes sont supprimées lorsque la table est recréée. Par conséquent, Microsoft vous recommande de ne pas contourner ce problème en désactivant l'option.
la source
SQL Server supprime et recrée les tables uniquement si vous:
L'utilisation d'ALTER est plus sûre, car si les métadonnées sont perdues pendant que vous recréez la table, vos données seront perdues.
la source
IDENTITY
propriété sur une colonne, par exemple.Oui, cela a des effets négatifs:
Si vous scriptez une modification bloquée par cet indicateur, vous obtenez quelque chose comme le script ci-dessous (tout ce que je transforme la colonne ID dans Contact en une colonne IDENTITY numérotée automatiquement, mais la table a des dépendances). Notez les erreurs potentielles qui peuvent se produire lors de l'exécution des éléments suivants:
-
la source