IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Création colonne au millieu d'une table


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut Création colonne au millieu d'une table
    Bonsoir,

    Soit une table contenant les champs :
    - champ1
    - champ2

    Je voudrais au final avoir cela :
    - champ1
    - nouveauchamp
    - champ2

    Comment insérer un champ au millieu d'autres champs à l'aide d'une commande SQL :
    ALTER TABLE matable INSERT .....

    Je sais le faire avec Entreprise manager mais pas avec une commande SQL.

    Merci.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Ceci est PARFAITEMENT STUPIDE et contrevient à la notion même de base de données relationnelles dons la théorie repose sur une logique ensembliste. Or il n'existe aucune notio d'ordre implicite dans les ensembles.

    SQL n'a donc pas prévu (et heureusement) cette possibilité farfelue et grotesque.
    Si vous voulez faire cela, retourner à des fichiers. N'utilisez pas un SGBDR et évitez SQL !

    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L6

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut
    C'est faisable avec l'enterprise manager(SQL-2000) ou le management studio (SQL-2005)
    Il faut sélectionner le table puis choisir modify (ou edit) puis on peu faire un insert d'une colonne avec la touche insert du clavier (après avoir sélectionné le nom d'une colonne).

    L'insert d'une colonne ne fonctionne que de cette manière.
    J'ai déja envisagé de le faire via les tables système mais c'est beaucoup trop dangereux.
    Si qulqu'un a une méthode via script. Je suis preneur.

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Bien sûr que les outils graphiques le permettent.
    Mais qu'est ce qui ce passe en arrière plan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Begin Transaction
    Une nouvelle table est crée
    Les données sont copiées entre les deux tables
    La première table est supprimée
    La deuxième est renomée avec le nom de l'ancienne table.
    Commit Transaction
    En conclusion, nous n'avons qu'un contournement, mais ce n'est pas pris en charge par SQL directement.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    et bonjour la merde s'il y des des contraintes d'intégrité référentielle et du volume de données dans la table !!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Surtout que cela ne t'apporte rien du tout, pour quoi se compliquer la vie avec des éléments de présentation ? ? ?

    Ajoute ta nouvelle colonne, puis crée une vue avec une présentaion et un ordre de colonne comme tu veux et le tour est joué !!!

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    Bonsoir,

    Ceux qui pratiquent les bases de données pourront imaginer le besoin.

    Il peut y avoir plusieurs raisons :
    - pour faire joli
    - pour éviter des problèmes lors de certaines requètes : select * from matable order by 3 (on ne maîtrise pas toujours les requètes faites par les utilisateurs)
    - ... (ajouter ici vos raisons)
    - pour mon besoin spécifique :

    j'ai créé un logiciel gratuit de comparaison de base de données (table, champs, vues, fonctions, procédures stockées, index, contraintes, triggers), je souhaite maintenant écrire le script pour "corriger" la/les bases qui ont des manquants ou des différences.
    C'est ici que je souhaiterai rajouter les champs "au milieu" de la table, je suis bien d'accord que c'est PARFAITEMENT STUPIDE et contrevient à la notion même de base de données relationnelles voire même farfelu et grotesque mais c'est bien plus carré et logique.

    Entreprise manager faisant cela, cela doit être possible.
    Est-ce que la seule solution est de dropper la table puis de la recréer ?

    Je n'ai jamais utilisé d'autres logiciels de synchronisation de base, comment font-ils ?

    Merci de vos réponses.

  8. #8
    Invité de passage
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1
    Par défaut J'avoue...
    J'avoue, moi aussi j'aime créer mes colonnes au bon endroit.
    Je n'en ai pas honte.

    SQLPro : Je vais me faire insulter aussi ? je devrais consulter ? lire votre livre ?
    ZERS : Tant mieux si le SGBD stocke les données de manière optimisée dans le disque. Moi ce qui m'importe ce n'est pas la "boîte noire", c'est ce que je vois en sortie.

    Quand je crée un logiciel pour un utilisateur, je lui présente les données dans l'IHM de manière claire et compréhensible.
    Quand j'utilise un SGBDR, je suis l'utilisateur de celui qui a conçu le SGBDR, donc j'exige que les données me soient présentées de manière claire et compréhensible.

    Si j'ajoute une colonne pour le deuxième prénom, je veux qu'elle apparaisse après le prénom quand je fais un SELECT * pour voir le contenu de ma table.
    Et je ne connais aucun SGBD qui renvoie les colonnes dans un ordre aléatoire lorsque l'on fait un SELECT * (SQL Server, MySQL, PostgreSQL, H2 Database, MS Access, FoxPro), il faut arrêter de plaisanter.

    La norme SQL et les théories ensemblistes sont une chose, tout cela s'applique au moteur du SGBDR, d'accord avec vous.
    Mais l'ordre des colonnes à l'écran, elle, vient d'une couche "présentation" de ce moteur, puisque comme vous l'avez dit, il n'y a pas d'ordre dans un ensemble... ça n'a donc rien à voir, donc merci de cesser avec vos "vous n'avez RIEN COMPRIS aux SGBDR, vous en êtes restés au FICHIERS..." ... ri-di-cule.

    En conclusion, SQLPRO, vous n'aviez peut-être pas pensé qu'il y avait aussi une couche de présentation dans les SGBDR ? (je fais référence à une architecture logicielle en couches si vous souhaitez vous documenter sur le sujet)

    Allez, sans rancune et bonne journée, mais essayez d'être beaucoup moins agressifs quand vous dispensez votre savoir.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Attention : si vous modifiez votre table en ajoutant une colonne au milieu, ou tout simplement en modifiant la longueur ou le type d'une colonne existante, vous compromettez l'utilisation d'anciennes sauvegardes qui ne pourront plus être rechargées

    Donc, même si je réprouve aussi la forme des remarques de certains contributeurs, sur le fond, je les rejoins à 100% :
    Une base de données doit être pérenne et sécurisée, compromettre les backup/restore pour un simple confort d'utilisation de select * est une erreur
    Sans compter que select * devrait être interdit dans les applications (c'est le plus souvent le cas d'ailleurs)

  10. #10
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Le simple fait de vouloir obtenir des colonnes "dans le bon ordre" à l'aide d'un SELECT * est une erreur.

    Le * ne sert qu'à deux choses :
    - Dans le COUNT(*)
    - A faire des tests de bidouilles quand on ne connait pas le MCD

    Pour le reste, on indique toujours le nom des colonnes retournées, ne serait-ce que pour éviter de charger des colonnes de type varchar(max) ou autres BLOB inutilement ! (bonjour la charge IO et réseau)

  11. #11
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Il y a aussi le EXISTS() qui est optimisé pour l'utilisation de *

    Dans tous les cas, le SELECT doit spécifier les colonnes à retourner, que l'on ajoute la colonne "à la fin" ou "au milieu" de la table.

    @++

  12. #12
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 514
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 514
    Par défaut
    Je rajoute ma petite goutte. L'utilisation du ORDER BY 1,2, ... est à utiliser seulement pour de la requête a mains levé juste pour regarder une info dans une table.
    En aucun cas ça doit être utilisé en développement. J'en ai vu ce faire jeter à cause de ça.

    Après, je peux comprendre qu'il y ait un besoin d'ordonner des colonnes selon sa logique. Au mieux il faut le faire lors de la conception de la table au pire, un bricolage qui consiste à stocker les données dans une table 2. Détruire la table 1 et la reconstruire mais c'est une très mauvaise idée aussi lié au référence. Le manager fait plus ou moins la même chose. Il suffit de regarder le script générer pour faire le changement de position. SQLPro à raison, c'est une chose illogique SQL Server n'est pas Acces. Je vais reprendre un exemple de SQLPro encore, il faut voir les champs stockés comme des billes dans un sac, c'est pareille pour les enregistrements. Il y a pas de sens

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'une colonne à l'interieur d'une table .
    Par silset dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/11/2009, 10h05
  2. recuperer la colonne clé primaire d'une table
    Par mapmip dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/01/2009, 18h36
  3. [A-07] création de bouton pour ouvrir une table
    Par Pinkstorm dans le forum IHM
    Réponses: 1
    Dernier message: 08/12/2008, 13h22
  4. Réponses: 4
    Dernier message: 07/10/2007, 20h39
  5. Réponses: 4
    Dernier message: 07/10/2007, 20h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo