Bonjour,

Je souhaite charger les données d'un fichier dans une table. Mais il faut que j'intégre uniquement les données valides (les lignes valides du fichier) dans la table et mettre les données erronées dans un autre fichier.
J'utilise cette commande dans un batch :

bcp mutubatch..tmp_testbcp in fichier_tmp_testbcp.txt -U sa -P -c -t";" -e erreur.txt -m 2

Et le problème est que toutes les lignes sont intégrées dans la table même celles qui ne correspondent pas à la structure de la table, elles sont tronquées. Mon fichier de données à 5 lignes dont trois erronées donc normalement je devrais avoir 2 lignes intégrées et 3 redirigées dans le fichier erreur.txt. Or j'obtiens pas ça. Comment faire ?

Merci,
ls

Annexes

Script shell :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/csh 
 
# Batch  : TestBcp.csh     
# Realise par : S.Lechable    
# But  :        
 
echo "Début du script - "$0 
date 
echo "Paramètre : "$1 
 
################################# 
# Paramètres  # 
################################# 
 
set EXTENSION=`date +"%Y%m%d"` 
set fic_trace=/home/sybase/admin/batch/test/trace/"TESTBCP.TRACE."$EXTENSION 
 
#################################################################### 
#                                 Sql                              # 
#################################################################### 
 
doit << EOFile 
 
select '# Début trace Sql ' , getdate() 
go 
 
use mutubatch 
go 
 
/**********************************************************************/ 
select '# Si les tables temporaires existent, elles sont supprimées.' , getdate() 
go 
 
if exists (select * from sysobjects where name='tmp_testbcp') 
 drop table tmp_testbcp 
go 
 
/**********************************************************************/ 
select '# Création des tables temporaires.' , getdate() 
go 
 
create table tmp_testbcp  
( 
chp1 char(2) null, 
chp2 char(2) null, 
chp3 char(2) null, 
chp4 char(2) null, 
chp5 char(2) null, 
chp6 char(2) null, 
chp7 char(2) null, 
chp8 char(2) null 
) 
go 
 
EOFile 
 
# BCP - Insertion des données dans les tables temporaires  
 
echo "Insertion des données des fichiers dans les tables temporaires" 
 
bcp mutubatch..tmp_testbcp in fichier_tmp_testbcp.txt -U sa -P  -c -t";" -e erreur.txt -m 2 
 
echo "Fin du script - "$0 
date
Fichier fichier_tmp_testbcp.txt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
ll;lo;lp;re;kr;pe;bv;op 
ll;lo;lp;re;kr;pe;bv;op 
ll;lo;rlp;re;kr;pe;bv;op 
ll;lo;lp;re;krr;pe;bv;op 
4ll;lo;lp;re;kr;pe;bv;op
Résultat du script :

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
Début du script - TestBcp.csh 
Mon Sep  6 14:56:20 MEST 2004 
Paramètre :  
 
 ------------------ --------------------------  
 # Début trace Sql         Sep  6 2004  2:56PM  
 
(1 row affected) 
 
 ------------------------------------------------------------ --------------------------  
 # Si les tables temporaires existent, elles sont supprimées.        Sep  6 2004  2:56PM  
 
(1 row affected) 
 
 ---------------------------------- --------------------------  
 # Création des tables temporaires.        Sep  6 2004  2:56PM  
 
(1 row affected) 
Insertion des données des fichiers dans les tables temporaires 
 
Starting copy... 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result is truncated because the conversion/operation resulted in overflow. 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result is truncated because the conversion/operation resulted in overflow. 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result is truncated because the conversion/operation resulted in overflow. 
 
5 rows copied. 
Clock Time (ms.): total = 1000  Avg = 200 (5.00 rows per sec.) 
Fin du script - TestBcp.csh 
Mon Sep  6 14:56:21 MEST 2004