Comment mettre à jour les structures des tables en conservant datatables actuelles

J'ai une application C # qui utilise des tables dans une database SQL Server 2008 (s'exécute sur un PC autonome avec SQL Server local).

Initialement, j'installe la database sur ce PC avec quelques données initiales (il y a des tables que l'application utilise et l'user ne touche pas).

La question est – comment puis-je mettre à jour cette database après que l'user a créé de nouveldatatables sans le nuire (je continue à développer sur un autre pc et peut append de nouvelles tables ou procédures stockées ou append des colonnes aux tables existantes).

Je veux dire que lorsque je publie une nouvelle version, j'apporte une nouvelle version de database sur le file de sauvegarde (ou autre chose?) Qui contient une nouvelle structure et ces tables initiales et j'ai besoin de mettre à jour la base existante sans perdre datatables actuelles.

Merci d'avance!

Vous devez mettre à niveau votre structure de database existante en utilisant des scripts de modification en utilisant des commands telles que ALTER TABLE et ainsi de suite.

Il y a essentiellement deux façons de le faire:

  • vous pouvez utiliser un outil basé sur "diff" comme Red-Gate SQL Compare pour déterminer les différences entre votre version de database x et la version (x + 1). Cet outil va créer un script de modification pour vous, que vous pouvez ensuite exécuter sur la machine cible pour amener votre database à la nouvelle structure

  • ou vous pouvez écrire ces scripts de modification manuellement et les regrouper et les exécuter sur la machine cible

De toute façon: vous devez garder une trace de vos versions de database, et vous devez faire preuve d'une extrême prudence afin de ne causer aucune perte de données avec les scripts (comme déposer une table ou quelque chose)

L'ajout de nouvelles tables ne devrait pas nuire aux tables existantes. Mais lors de l'ajout de colonnes, vous devez veiller à remplir les valeurs de ces colonnes pour les lignes existantes (en particulier si les colonnes ont une contrainte non nulle – dans ce cas, vous devez utiliser la clause DEFAULT). Vous pouvez y parvenir en utilisant la clause DEFAULT et en exécutant une requête SQL spéciale après la création de la colonne afin de définir la valeur de la nouvelle colonne dans les lignes existantes.

Vous pouvez également utiliser des foreign keys pour lier des lignes d'une table avec les lignes d'une autre table. Cela pourrait vous aider à réduire la taille de vos tables et à mieux séparer vos données.

Vraiment déteste faire ça sans les détails, mais …

En général:

  1. Renommez la table en cours en table temporaire
  2. Créer une table avec une nouvelle configuration
  3. Sélectionner à partir de la table temporaire dans la nouvelle table
  4. Si tout a fonctionné, supprimez la table temporaire

Tout cela peut être fait en un seul script. Je l'ai vu fait.

Vous pouvez également envisager ceci: SQL Server Management Studio – comment modifier un type de champ sans supprimer de table