Meilleur auteur de réponses
Modification de tables avec ALTER TABLE

Question
-
Je désire ajouter de nouveaux champs à des endroits précis dans l'ordre des champs.
Voici un requête approximative ALTER TABLE:
USE [ANDON-MP] GO ALTER TABLE [ANDON-MP].[dbo].[Configuration] ADD Line1ScheduleId INT NULL ALTER TABLE [ANDON-MP].[dbo].[Configuration] ADD Line2ScheduleId INT NULL UPDATE [ANDON-MP].[dbo].[Configuration] SET Line1ScheduleId = ScheduleId, Line2ScheduleId = ScheduleId ALTER TABLE [ANDON-MP].[dbo].[Configuration] DROP ScheduleId GO
Supposons que la table 'Configuration' est composé comme suit:
Champ1 INT NULL
Champ2 INT NULL
Champ3 INT NULL
ScheduleId INT NULL
Je désire ajouter le champ Line1ScheduleId après Champ1 mais avant Champ2. Le champ Line2ScheduleId doit être inséré entre Champ2 et Champ3. Par la suite, je veux éliminer le champ ScheduleId.
J'ai de la difficulté à trouver des exemples pratiques pour comprendre ce que je dois faire. J'ai les guides d'auto-apprentissage 70-432, 70-433 ainsi que Step By Step 2008 mais je n'ai pas d'exemple clair.
Suggestions pour éclairer ma lanterne?
Luc Saucier
Réponses
-
Bonjour,
Je ne comprends pas exactement pourquoi vous voulez changer l’ordre des colonnes de votre table, vu que cet ordre n’influence en aucune mode vos requêtes ou les performances de votre base de données. La plus simple méthode pour avoir l’ordre désiré est créer une vue pour la table avec l’ordre correcte (voir aussi la solution proposée sur Connect). Puis, vous pouvez créer une table Configuration_Copy avec l’ordre des colonnes dont vous avez besoin, copier toutes les infos de la table Configuration dans Configuration_Copy, supprimer la table Configuration et puis renommer Configuration_Copy en Configuration, mais puis il faut recréer toutes les FKs qui impliquent la table Configuration.
Finalement, vous pouvez utiliser le concepteur des tables de SQL Server Management Studio pour insérer les colonnes, mais il faut décocher « Prevent saving changes that require table re-creation » dans le menu « Tools->Options->Designer Page ».
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Marqué comme réponse LucSaucierSILS lundi 26 mars 2012 14:46
-
Bonjour,
Si on veut vraiment le faire, il faudrait sauver/supprimer/recréer/restaurer (ou peut-être copier/renommer) la table en prenant en compte tous les problèmes que cela peut poser. Faire par exemple une trace avec SQL Server Profiler pour voir ce que cela donne quand vous faites les manips avec SQL Server Management Studio, juste ppur vous donner une idée des opérations effectuées.
Par principe ALTER ajoute les champs à la fin ce qui évite toute réorganisation. Normalement l'ordre des champs ne devrait pas être crucial pour votre application (par exemple un SELECT avec les noms de champs explicite plutôt qu'un SELECT * vous permet de montrer les champs dans l'ordre que vous voulez ou mieux séparer l'ordre d'affichage et l'ordre dans lequel les colonnes sont retournées ???). Si vous supprimez ce besoin, vous n'aurez plus ce problème d'ordre.
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse LucSaucierSILS lundi 26 mars 2012 14:45
Toutes les réponses
-
Bonjour,
Je ne comprends pas exactement pourquoi vous voulez changer l’ordre des colonnes de votre table, vu que cet ordre n’influence en aucune mode vos requêtes ou les performances de votre base de données. La plus simple méthode pour avoir l’ordre désiré est créer une vue pour la table avec l’ordre correcte (voir aussi la solution proposée sur Connect). Puis, vous pouvez créer une table Configuration_Copy avec l’ordre des colonnes dont vous avez besoin, copier toutes les infos de la table Configuration dans Configuration_Copy, supprimer la table Configuration et puis renommer Configuration_Copy en Configuration, mais puis il faut recréer toutes les FKs qui impliquent la table Configuration.
Finalement, vous pouvez utiliser le concepteur des tables de SQL Server Management Studio pour insérer les colonnes, mais il faut décocher « Prevent saving changes that require table re-creation » dans le menu « Tools->Options->Designer Page ».
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Marqué comme réponse LucSaucierSILS lundi 26 mars 2012 14:46
-
Bonjour,
Si on veut vraiment le faire, il faudrait sauver/supprimer/recréer/restaurer (ou peut-être copier/renommer) la table en prenant en compte tous les problèmes que cela peut poser. Faire par exemple une trace avec SQL Server Profiler pour voir ce que cela donne quand vous faites les manips avec SQL Server Management Studio, juste ppur vous donner une idée des opérations effectuées.
Par principe ALTER ajoute les champs à la fin ce qui évite toute réorganisation. Normalement l'ordre des champs ne devrait pas être crucial pour votre application (par exemple un SELECT avec les noms de champs explicite plutôt qu'un SELECT * vous permet de montrer les champs dans l'ordre que vous voulez ou mieux séparer l'ordre d'affichage et l'ordre dans lequel les colonnes sont retournées ???). Si vous supprimez ce besoin, vous n'aurez plus ce problème d'ordre.
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse LucSaucierSILS lundi 26 mars 2012 14:45
-
-
J'ai simplement l'habitude de pointer sur une table et de faire "Sélectionner les 1000 lignes du haut" sans utiliser les vues. Lorsque les tables sont dans l'ordre, c'est plus facile à lire.
Je devrai regarder pour l'utilisation des vues mais mes recherches ultérieures ont démontré qu'il faut "copier/recréer/restaurer/enlever copie" pour changer l'ordre. Donc j'ai programmé la semaine passée avec cette technique avant l'obtention de cette réponse.
J'avais déjà planifié de sélectionner chaque champ dans le programme partout où j'ai 'SELECT * FROM...'. Par contre, comme j'ai hérité d'un programme avec ce genre d'intervention, mon but était en premier d'apporter le moins de modifications possibles.
Merci pour l'aide.
Luc Saucier
- Modifié LucSaucierSILS lundi 26 mars 2012 14:54