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 :

colonnes physiquement ordonnées ?!


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut colonnes physiquement ordonnées ?!
    Salut,

    ce n'est pas vraiment un problème que je vous soumets puisqu'il est résolu, mais j'aimerais vos explications sur des comportements surprenants.

    J'ai exporté les données et la structure d'une table au moyen de BCP.
    J'ai voulu importer ces données dans une base équivalente, mais une colonne avait été ajoutée dans cette table cible.

    J'ai alors obtenu un message d'erreur m'indiquant un problème de structure.
    1ère interrogation : BCP disposant de la structure de la table, pourquoi n'arrive-t-il pas à se démerder tout seul ?

    Donc pas terrible comme comportement, mais bon.
    suite : J'ai donc créé cette colonne dans la table source, et j'ai recommencé l'opération.
    Et là nouveau problème de structure.
    J'ai retourné le pb dans tous les sens, et la seule différence que j'ai noté était l'ordre des nom de colonnes à l'écran dans SQL Server !
    J'ai donc placé cette nouvelle colonne au même endroit.
    SQL Server a mouliné pour... recalculer des liaisons entre des tables ? Je sais pas. Etrange. Bref, nouvel essai d'import. Victoire !

    2e interrogation : la structure logique d'une BD SQL Server serait liée à sa structure physique ???!!!

    Super bizarre tout ça... Alors si vous avez des explications, je suis preneur.

    PS : j'ai un peu bossé sur Oracle avant, je débarque sur SQL Server, peut-être que la logique n'est pas la même ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    1ère interrogation : BCP disposant de la structure de la table, pourquoi n'arrive-t-il pas à se démerder tout seul ?
    BCP ne dispose à aucun moment de la structure de la table (sauf en utilisant un fichier de format). BCP génère un fichier plat avec les données de la table, sans la structure.
    Donc si les structures de la table d'origine et de destination différent, cela ne pourra marcher.
    L'avantage du BCP est de charge rapidement un grand nombre d'enregistrement à la place d'un insert/select par exemple qui serait bcp plus long.

    J'ai retourné le pb dans tous les sens, et la seule différence que j'ai noté était l'ordre des nom de colonnes à l'écran dans SQL Server !
    J'ai donc placé cette nouvelle colonne au même endroit.
    L'ordre des colonnes est bien sûr important car bcp n'a pas connaissance de la structure de la table.
    Mais pourquoi vouloir placer la colonne de la table source à un autre endroit que celle de destination ?

    SQL Server a mouliné pour... recalculer des liaisons entre des tables ? Je sais pas. Etrange. Bref, nouvel essai d'import. Victoire !
    Si la table possède des index, des triggers, l'effet principal du bcp (la rapidité) est amoindri car il faut en effet pour chaque enregistrement valider les triggers, et mettre à jour les index, comme d'hab.
    [QUOTE]

    Actuellement, à peu près tous les SGBD fonctionnent selon ce principe, comme l'on stocke des enregistrements, ces enregistrements étant composés de colonnes, cet ordre est physiquement retranscrit dans les pages/blocs.

    BCP ne connaît pas le structure des tables au chargement, c'est à vous de faire en sorte que l'ordre des colonnes est correct par rapport à la table de destination.
    Emmanuel T.

  3. #3
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    En d'autres termes, ce que veut dire Emmanuel, est que BCP est la seule commande (avec BULK INSERT, fonctionnement idem) qui court-circuite le moteur relationnel pour parler directement au moteur de stockage, donc, il ne passe pas par du code SQL, mais insère directement les lignes. C'est donc le seul mécanisme sensible à un ordre physique des colonnes dans la table.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  4. #4
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par kagemaru Voir le message
    bonjour,


    BCP ne dispose à aucun moment de la structure de la table (sauf en utilisant un fichier de format).
    Justement, comme je l'ai indiqué, j'ai bien utilisé un fichier de format XML.
    Donc BCP connaît bien la structure de la table, sinon à quoi sert ce fichier ?

    Mais pourquoi vouloir placer la colonne de la table source à un autre endroit que celle de destination ?
    Ce n'est pas moi qui a ajouté une nouvelle colonne, je ne sais pas pourquoi elle a été ajoutée en "plein milieu" et pas "à la fin".
    Mais je mets bien ces termes entre guillemets car je n'imagine pas que l'ordre de présentation dans l'interface de SQL Server ait un quelconque rapport avec l'organisation physique interne qui n'est pas le soucis de l'utilisateur mais celui du SGBD. (et éventuellement du BDA)

    PS : désolé pour cette réponse tardive, le mail d'avertissement était tombé dans la boîte de spams

  5. #5
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par rudib Voir le message
    Bonjour,

    En d'autres termes, ce que veut dire Emmanuel, est que BCP est la seule commande (avec BULK INSERT, fonctionnement idem) qui court-circuite le moteur relationnel pour parler directement au moteur de stockage, donc, il ne passe pas par du code SQL, mais insère directement les lignes. C'est donc le seul mécanisme sensible à un ordre physique des colonnes dans la table.
    OK, mais même interrogations alors :
    - à quoi sert le fichier de format ?
    - je trouve ça totalement aberrant qu'un SGBD, qui n'est qu'une interface entre la BD et l'utilsateur, ne fasse pas abstraction de son organisation physique pour l'utilisateur. C'est contraire à tout ce qui se fait maintenant habituellement en informatique ???

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par Peanut Voir le message
    OK, mais même interrogations alors :
    - à quoi sert le fichier de format ?
    - je trouve ça totalement aberrant qu'un SGBD, qui n'est qu'une interface entre la BD et l'utilsateur, ne fasse pas abstraction de son organisation physique pour l'utilisateur. C'est contraire à tout ce qui se fait maintenant habituellement en informatique ???
    Le fichier de format sert à expliquer quel est le format du fichier d'import, pas de la table destination.
    Si tu n'aimes pas BCP, personne ne te force à l'utiliser. Integration Services peut faire l'affaire.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  7. #7
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par rudib Voir le message
    Le fichier de format sert à expliquer quel est le format du fichier d'import, pas de la table destination.
    Ce n'est pas cohérent : à quoi sert de connaître format (de départ, du fichier ou d'arrivée, peu importe) s'il ne s'agit que de copier des données binaires ?

    Si tu n'aimes pas BCP, personne ne te force à l'utiliser. Integration Services peut faire l'affaire.
    C'est sûr.
    J'essaye juste de comprendre. Je vois de telle abérations que je me dis que quelquechose a dû m'échapper et j'essaye de comprendre.

    Et ça va au-delà de bcp : ça m'inquiète cette histoire de shéma physique qui ne serait pas dissocié du schéma logique...

Discussions similaires

  1. ordonner un tableau associatif selon une colonne
    Par hoolako dans le forum PL/SQL
    Réponses: 4
    Dernier message: 10/03/2010, 18h43
  2. Passer des données en colonne a données ordonnées en ligne
    Par taollagad dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/05/2009, 02h36
  3. Comment ordonner les colonnes dans un indexe
    Par Fba_mainsys dans le forum SQL
    Réponses: 4
    Dernier message: 10/10/2007, 11h59
  4. Datatable - Ordonner les colonnes
    Par Jobinma dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/04/2007, 19h30

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