Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Outils
Outils Forum d'entraide sur les outils gravitant autour de MS-SQL Server, tels que bcp, TDS, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2011, 14h52   #1
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
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 :
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 :
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:
Citation:
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 :
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h02   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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 :
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 15h17   #3
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Je ne suis pas à l'origine de ces bcp. J'aurais peut-être pensé à une vue.
Peux-tu préciser
Citation:
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 10h59   #4
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 19h06   #5
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 13h39   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Bonjour,

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

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 21h18   #7
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 22h35   #8
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 13h57   #9
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Donc je reste sur les vues.
Cordialement
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h37.


 
 
 
 
Partenaires

Hébergement Web