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

Outils SQL Server Discussion :

bcp exporter quelques colonnes d'une table


Sujet :

Outils SQL Server

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut bcp exporter quelques colonnes d'une table
    Bonjour,
    Je suis embêtée car il a été mis en place des exports de tables par bcp, pour les réimporter dans un autre environnement.
    Lorsqu'on rajoute une colonne dans les tables à exporter le bcp plante.
    Pour l'instant ce qu'on fait, c'est qu'on rajoute ces colonnes dans le fichiers de sortie et cela fait qu'il faut modifier l'import dans l'autre environnement.
    Y at-il un moyen pour
    a/ qu'on n'ait pas à retoucher le fichier de format lorsque la table change
    b/ou que le fichier de sortie n'ait pas les nouvelles colonnes même si on doit changer le fichier de format.

    voilà des précisions .
    L'instruction d'export :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET CNetEnv="DEV"
    bcp CDAP_%CNetEnv%.dbo.tadi out "TADI.DAT" -T -f "tadi..xml"
    Le fichier tadi..xml auquel il manque la nouvelle colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?xml version="1.0"?>
    <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <RECORD>
      <FIELD ID="1" xsi:type="CharFixed" LENGTH="9" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="2" xsi:type="CharFixed" LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="3" xsi:type="CharFixed" LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="4" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="5" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="6" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="7" xsi:type="CharFixed" LENGTH="5" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="8" xsi:type="CharFixed" LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="9" xsi:type="CharFixed" LENGTH="2" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="10" xsi:type="CharFixed" LENGTH="2" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="11" xsi:type="CharFixed" LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="12" xsi:type="CharFixed" LENGTH="15" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="13" xsi:type="CharFixed" LENGTH="23"/>
      <FIELD ID="14" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="23"/>
     </RECORD>
     <ROW>
      <COLUMN SOURCE="1" NAME="TADI_ADI_COD" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="2" NAME="TADI_MED_NOM" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="3" NAME="TADI_MED_PRE" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="4" NAME="TADI_MED_AD1" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="5" NAME="TADI_MED_AD2" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="6" NAME="TADI_MED_AD3" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="7" NAME="TADI_PTT_COD" xsi:type="SQLCHAR"/>
      <COLUMN SOURCE="8" NAME="TADI_MED_VIL" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="9" NAME="TADI_CRP_COD" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="10" NAME="TADI_MED_ACT" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="11" NAME="TADI_ALB_FLG" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="12" NAME="TADI_ADI_MAT" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="13" NAME="TADI_OUV_DAT" xsi:type="SQLDATETIME"/>
      <COLUMN SOURCE="14" NAME="TADI_FER_DAT" xsi:type="SQLDATETIME"/>
     </ROW>
    </BCPFORMAT>
    Le message d'erreur lorqu'on le joue sur une table ayant une colonne supplémentaire:
    D:\soazig>bcp CDAP_%CNetEnv%.dbo.tadi out "TADI.DAT" -T -f "tadiinit..xml" -S et
    ud06
    SQLState = HY000, NativeError = 0
    Error = [Microsoft][SQL Native Client]Le nombre de champs fourni pour l'opératio
    n bcp est inférieur au nombre de colonnes sur le serveur.
    Le fichier tadi..xml modifié avec la colonne en plus TADI_MED_TYP, qui exporte bien mais avec la colonne TADI_MED_TYP en trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0"?>
    <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<RECORD>
    		<FIELD ID="1" xsi:type="CharFixed" LENGTH="9" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="2" xsi:type="CharFixed" LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="3" xsi:type="CharFixed" LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="4" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="5" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="6" xsi:type="CharFixed" LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="7" xsi:type="CharFixed" LENGTH="5" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="8" xsi:type="CharFixed" LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="9" xsi:type="CharFixed" LENGTH="2" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="10" xsi:type="CharFixed" LENGTH="2" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="11" xsi:type="CharFixed" LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="12" xsi:type="CharFixed" LENGTH="15" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    		<FIELD ID="13" xsi:type="CharFixed" LENGTH="23"/>
    		<FIELD ID="14" xsi:type="CharFixed" LENGTH="23"/>
    		<FIELD ID="15" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1"/>
    	</RECORD>
    	<ROW>
    		<COLUMN SOURCE="1" NAME="TADI_ADI_COD" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="2" NAME="TADI_MED_NOM" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="3" NAME="TADI_MED_PRE" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="4" NAME="TADI_MED_AD1" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="5" NAME="TADI_MED_AD2" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="6" NAME="TADI_MED_AD3" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="7" NAME="TADI_PTT_COD" xsi:type="SQLCHAR"/>
    		<COLUMN SOURCE="8" NAME="TADI_MED_VIL" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="9" NAME="TADI_CRP_COD" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="10" NAME="TADI_MED_ACT" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="11" NAME="TADI_ALB_FLG" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="12" NAME="TADI_ADI_MAT" xsi:type="SQLVARYCHAR"/>
    		<COLUMN SOURCE="13" NAME="TADI_OUV_DAT" xsi:type="SQLDATETIME"/>
    		<COLUMN SOURCE="14" NAME="TADI_FER_DAT" xsi:type="SQLDATETIME"/>
    		<COLUMN SOURCE="15" NAME="TADI_MED_TYP" xsi:type="SQLVARYCHAR"/>
    	</ROW>
    </BCPFORMAT>
    Cordialement
    Soazig

  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
    21 716
    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 : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    Par défaut
    Vous ne pouvez pas avoir le beurre, l'regent du beuure et la crémière...

    • SOIT vous faites un fichier de format qui ignore ces colonnes
    • SOIT vous faites une vue au lieu d'utiliser une table (entre nous vous ne devriez JAMAIS utiliser un accès direct aux tables pour développer une application, mais toujours passer par des vues)
    • SOIT vous modifiez la requête dans la commande BCP, par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bcp "SELECT MesColonnes FROM CDAP_%CNetEnv%.dbo.tadi" out "TADI.DAT" -T -f "tadi..xml"
    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 éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je ne suis pas à l'origine de ces bcp. J'aurais peut-être pensé à une vue.
    Peux-tu préciser
    SOIT vous faites un fichier de format qui ignore ces colonnes
    Parce que je n'ai pas trouvé le moyen de faire cela, si les colonnes existent dans la table.
    Cordialement
    soazig

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour ma culture personnelle, j'aimerai toujours savoir comment faire le b/
    C'est à dire ne pas exporter toutes les colonnes d'une table en jouant sur le fichier format.

    Pour le problème initial, il a été décidé de créer des vues pour toutes les tables déchargée actuellement, afin de se prémunir d'un éventuel problème dans le futur.
    Soit 50 vues, ouf, avez vous un outil pour générer tout ça, je pense que je vais me le coder en utilisant information_schema.colums, mais s'il y en a un qui existe, je ne vais pas réinventer la roue.
    Merci
    Soazig

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    J'ai codé moi-même un executable vb.net qui m'a généré mes 50 vues.
    Ce problème est résolu. Néanmoins si quelqu'un a la syntaxe pour n'exporter que quelques colonnes d'une table cela m'intéresse pour ma culture personnelle.
    Merci
    Soazig

  6. #6
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    La démarche est entièrement expliquée dans la documentation

    @++

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour
    Merci Elsuket pour cette documentation, hélas à moins que j'ai eu la berlue, cela explique comment le faire en import et non en export
    en utilisant bulk insert
    ou OPENROWSET
    Mais pas en export en utilisant bcp.

    D'ailleurs la solution bulk insert utilise une vue.
    Soazig

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Pas de possibilité en export. La solution BCP ne sera pas la bonne dans ce cas.

    Message rencontré dans ce cas :

    Host-File Column s may be skipped only when copying into the server

    ++

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Donc je reste sur les vues.
    Cordialement
    Soazig

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/10/2009, 20h56
  2. [Firebird 1.5] nom des colonnes d'une table
    Par c0rwyn dans le forum SQL
    Réponses: 4
    Dernier message: 03/09/2004, 15h44
  3. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 11h15
  4. Instruction SQL qui supprime une colonne d'une table
    Par tseg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2003, 21h47
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 17h12

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