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

MS SQL Server Discussion :

agir sur l'ordre des colonnes ?


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut agir sur l'ordre des colonnes ?
    Bonjour,

    j'ai une petite question : est-ce qu'il est possible de modifier l'ordre des colonnes d'un table ? ou bien de rajouter une colonne à une position précise par exemple ?

    je vous explique le problème :c'est par rapport à BCP.
    Il y a des temps en temps des colonnes qui se rajoutent au beau milieu du fichier que je dois importer...donc il y a un décalage BCP plante.

    jusqu'à présent j'ai rien trouver de mieux que de rajouter le champ/ récuperer le code sql de la table / couper-coller le champ où je le veux réellement / créer nouvelle table /deplacer les données / supprimer la vieille table / renommer...

    Mais je pense qu'il doit y a avoir plus intelligent comme façon de faire

    Merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    1. D'un point de vue SQL, la question n'a pas de valeur puisque l'ordre physique ne devrait pas jouer de rôle.
    2. C'est possible cependant via l'Enterprise Manager : le déplacement d'une colonne (drag&drop) modifie le colid de syscolumns
    3. autrement, jusqu'en 2005 non compris, il y a possibilité, avec un bon doigté, de modifier "à la main" via update dans syscolumns, mais pas conseillé car gros impact, surtout si colonne indexée ou référencée.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    C'est à dire que si ton fichier de base a parfois une différence de format (i.e. de nombre de colonnes), tu pourras jamais rien automatiser... T'auras beau écrire tout le code que tu veux, une intervention manuelle sera toujours nécessaire

    Donc ta manipulation manuelle reste la meilleure...

    Mais faut résoudre soucis à la source, bien sur, demander à celui qui te fournit le fichier pourquoi t'a des colonnes en plus

  4. #4
    Invité
    Invité(e)
    Par défaut
    Une petite recherche rapide vous aurait aidé.

  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 017
    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 017
    Billets dans le blog
    6
    Par défaut
    Pour BCP il suffit d'utiliser un fichier de format et le tour est joué. Pas besoin de modifier l'ordre des colonnes d'une table ou de rajouter une colonne à une position précise, car cela est sémantiquement idiot.

    A lire : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L6

    Pour en savoir plus sur les fichier de format de bcp : aide avec MAJ + F1 dans l'analyseur de requêtes "Utilisation de fichiers de format".

    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
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    ok merci pour vos réponses. Je mets en résolu mais :

    @Zers : oui enfin, c'est prévu quand même que le nouveau champ se rajoute, evidement

    . Pas besoin de modifier l'ordre des colonnes d'une table ou de rajouter une colonne à une position précise, car cela est sémantiquement idiot.
    Point de vue SQL peut être, mais pas point de vue "humain"...rien que pour "regrouper" un peu les champs entre eux.

    Ex : à l'origine une table contient un champ "nom", puis 3 mois après on se dit "il faut rajouter le prénom", et bien voilà
    nom........X champs entre......... prénom

    (je sais que sql permet d'afficher/d'ordonner ce qu'on veut mais même)
    pour moi ce serait tout naturel de placer prénom à coté de nom...rien que pour dans tous les outils SQL la liste des champs, les TreeView, qu'on ait un aperçu direct quoi.

    Nom/Prénom ok c'est bidon comme exemple : mais par exemple, justement si quelqu'un ne connait pas la structure de la table, si les champs étaient un peu "groupés", ça aiderait tout de suite
    (d'ailleurs c'est prévu dans mysql : "add column AFTER column_name ]", c'est bien que c'est utile)

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 017
    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 017
    Billets dans le blog
    6
    Par défaut
    Bon alors je vais encore enfoncer quelques clous....

    [ordre des colonnes...] Point de vue SQL peut être, mais pas point de vue "humain"...rien que pour "regrouper" un peu les champs entre eux.
    Deux erreurs dans votre laius :
    1) la notion de champs n'existe pas dans les base de données relationnelels; On parle de COLONNE. Un champ induit une notion visuelle que la base de donnée n'a pas ! d'ou votre erreur vous confondez les IHM (interface homme machine) et les données. Ce n'est pas à SQL de faire cela. C'est à votre l4g.
    2) les bases de données reposent sur un niveau d'abstraction qui rerpose sur la théorie des ensembles. Un ensemble ne possède par essence aucun ordre interne, mais simplement des relations entre les éléments de l'ensemble.
    Une table peu (et doit) être vue comme un sac de bille : Si je vous donne mon sac de bille, il n'existe aucun moyen pour vous de savoir quelle a été la première ou la dernière bille que j'y ais mis. De la même manière une colonne rajoutée à une table ne doit pas avoir d'emplacement spécifique.

    Pour faire cela il suffit de spécifier l'ordre de vos colonnes dans la clause SELECT de l'ordre SELECT dans le sens que vous voulez. C'est aussi simple que cela. En fait vous vous attendez sans doute que magiquement SELECT * vous donne l'ordre de la création des colonnes. Hé bien sachez que cela n'est JAMAIS GARANTIE. SQL agit de manière ensemblsite et même si vous créez les colonnes dans l'odre C1, C2, C3, le fait de faire un SELECT * ne vous garantiera JAMAIS que vous aurez C1 suivi de C2 suivi de C3. Vous pouvez parfaitement avoir C3 puis C1 puis C2. C'est d'ailleurs généralement le cas lorsque sont mélangés des colonnes de divers nature et en particulier des BLOB.

    De plus le "SELECT *" est fortement déconseillé. En effet si non seulement vous n'avez pas la garantie de la reproduction de l'ordre des colonnes, vous n'avez pas non plus la garantie du nombre de ces dernières car un ALTER TABLE ADD ... va rajouter ou supprimer une colonne auquel cas le code du L4G destiné à traiter la requête risque de partir en sucette ! En outre SELECT * n'est pas optimisable.

    d'ailleurs c'est prévu dans mysql : "add column AFTER column_name ]", c'est bien que c'est utile)
    Cet exemple est particulièrement malvenu car MySQL n'est pas à la base un SGBD relationnel. C'est un gestionnaire de données à base de fichier avec un légère couche SQL. La plupart des commandes MySQL n'existe pas dans le langage SQL. Inversement beaucoup de commande de la norme SQL ne sont pas disponibles dans MySQL. SQL est une norme déposée à l'iso. MySQL AB, la boite commerciale qui vend MySQL (produit non libre d'ailleurs) a tenté de masqué son incapacité à produire un vrai SGBDR avec des commandes pseudo SQL hautement fantaisistes. Le problème c'est que des gens n'ayant pas de culture base de données comme vous sont persuadés que MySQL c'est du SQL.

    Je vous invite à vous former à SQL. Pour cela mon site SQLpro vous est ouverts. Vous pouvez compléter votre culture par les livres que j'ai écrit.

    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/ * * * * *

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

Discussions similaires

  1. choisir l'ordre des colonnes sur un histogramme vbar
    Par distro dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 08/02/2009, 23h32
  2. [C#] ordre des colonnes dans un datagrid
    Par enfants dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/06/2006, 02h35
  3. Ordre des Colonnes d'une requête
    Par dlh1222 dans le forum Access
    Réponses: 4
    Dernier message: 15/09/2005, 00h43
  4. Rajout colonne - changer l'ordre des colonnes ?
    Par Coptere dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/09/2005, 11h56
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 24/06/2004, 00h04

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