Pourquoi est-ce que je reçois un message indiquant que la table doit être supprimée et recréée lorsque j'ajoute/déplace des colonnes? Je crois que cela se produit après avoir ajouté des contraintes de clé étrangère.
Que puis-je faire pour ajouter de nouvelles colonnes sans déposer de table?
Si vous souhaitez simplement que SSMS cesse de vous harceler, vous pouvez décocher le paramètre "Empêcher l'enregistrement des modifications qui requièrent une re-création de table" dans Options-> Designers-> Designers de tables et de bases de données. La ou les tables seront toujours supprimées et recréées, mais au moins SSMS ne vous importunera pas autant à ce sujet.
(Cela suppose que vous travaillez dans un environnement de développement/test ou dans un environnement de production où une brève erreur dans l'existence de la table ne gâche rien.)
Parce que c'est comme ça que SQL Server Management Studio le fait (parfois)!
Utilisez TSQL's ALTER TABLE à la place:
ALTER TABLE
ADD myCol int NOT NULL
SQL Server (et tout autre SGBDR, en réalité) n'a aucune notion "d'ordre de colonne" - par exemple. Si vous déplacez des colonnes, le seul moyen d'obtenir cette nouvelle structure de table consiste à émettre une nouvelle instruction CREATE TABLE
. Vous ne pouvez pas ordonner vos colonnes d'une autre manière - vous ne devriez pas non plus le faire, car dans la théorie relationnelle, l'ordre des colonnes dans un Tuple n'a pas d'importance.
Ainsi, la seule chose que SQL Server Management Studio puisse faire (et qu’elle a faite depuis le début) est la suivante:
La seule façon de contourner cela est:
ALTER TABLE
au lieu du concepteur de table interactive pour votre travailLorsque vous modifiez une définition de table dans le concepteur, vous dites "voici à quoi ressemblera la table, déterminez maintenant quelles instructions SQL émettre pour que mes souhaits se réalisent". Cela fonctionne bien pour des changements simples, mais le logiciel ne peut pas lire dans vos pensées, et parfois, il essaye de faire les choses de manière plus compliquée pour la sécurité.
Lorsque cela se produit, je suggère que, au lieu de cliquer simplement sur OK, cliquez sur le bouton "Script" en haut de la boîte de dialogue et laissez-le générer les instructions SQL dans une fenêtre de requête. Vous pouvez ensuite éditer et simplifier le code généré avant de l'exécuter.
Il y a des bogues dans SSMS 2008 R2 (et plus anciens) qu'il est utile de connaître:
Je l'ai signalé il y a quelques années dans les commentaires de Microsoft Connect, mais les bogues ont été fermés car ils sont "de par leur conception".
Mettre à jour:
C’est étrange et irritant de voir un produit de bureau développé au cours de deux décennies, alors que cela (rafraîchissement automatique) est effectué par la plupart des applications Web dans n’importe quel navigateur.