Bonjour,
J'utilise l'utilitaire bcp de SQL Server pour importer des données d'un fichier vers une table de ma base de données.
Mon problème est le suivant :
Dans ma table, j'ai certaines colonnes qui sont varchar(x), nullables.
Je voudrais insérer NULL dans ces colonnes quand je n'ai pas de donnée correspondante dans mon fichier.
Voici ma commande bcp :
bcp MYDATABASE.dbo.CountryTable in "D:\010.dat" -T -f my_format_file_010.xml -S FRDTOSIS165 -b 1000000 -k
Voici le fichier de format que j'utilise :
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="22" COLLATION="French_CS_AS"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="4"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="3"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="3" COLLATION="French_CS_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="9"/>
<FIELD ID="6" xsi:type="CharFixed" LENGTH="1" COLLATION="French_CS_AS"/>
<FIELD ID="7" xsi:type="CharFixed" LENGTH="3"/>
<FIELD ID="8" xsi:type="CharFixed" LENGTH="3" COLLATION="French_CS_AS"/>
<FIELD ID="9" xsi:type="CharFixed" LENGTH="9"/>
<FIELD ID="10" xsi:type="CharFixed" LENGTH="5" COLLATION="French_CS_AS"/>
<FIELD ID="11" xsi:type="CharFixed" LENGTH="1"/>
<FIELD ID="12" xsi:type="CharFixed" LENGTH="2" COLLATION="French_CS_AS"/>
<FIELD ID="13" xsi:type="CharFixed" LENGTH="3" COLLATION="French_CS_AS"/>
<FIELD ID="14" xsi:type="CharTerm" TERMINATOR="\r\n" LENGTH="3"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="col1" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="col2" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="3" NAME="col3" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="4" NAME="col4" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="5" NAME="col5" xsi:type="SQLINT"/>
<COLUMN SOURCE="6" NAME="col6" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="7" NAME="col7" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="8" NAME="col8" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="9" NAME="col9" xsi:type="SQLINT"/>
<COLUMN SOURCE="10" NAME="col10" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="11" NAME="col11" xsi:type="SQLBIT"/>
<COLUMN SOURCE="12" NAME="col12" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="13" NAME="col13" xsi:type="SQLVARYCHAR" />
<COLUMN SOURCE="14" NAME="col14" xsi:type="SQLSMALLINT"/>
</ROW>
</BCPFORMAT> |
Voici les données dans mon fichier :
(Capture d'écran Notepad++ pour se rendre compte des espaces, caractères spéciaux, caractères de fin de ligne etc..)
Mon fichier de données ne contient pas de séparateur.
Une ligne contient 14 champs.
Chaque champ est défini sur un nombre fixe de caractères.
Pour se rendre compte de mon problème, prenons l'exemple de "col13" :
Le champ "col13" est nullable. Pour ce champ, dans le fichier, pour une valeur NULL, on laisse ce champ vide.
(exemple : sur ma capture d'écran, voir la 3ème ligne du fichier, j'ai surligné le champ col13 en gris)
Ce champ correspond à une colonne de type varchar(3), NULL dans ma table.
Après la commande bcp, dans ma base de donnée, je voudrais que pour la ligne 3, il y ait la valeur NULL.
Actuellement, il y a une chaîne vide de length= 0.
Note n°1 : pour les champs NULL qui ne sont pas de type varchar, comme par exemple des smallint nullable, les valeurs NULL sont bien insérées.
Note n°2 : Dans SQL Server, pour ma table, si je met une valeur par défaut, cette valeur par défaut pour col13 n'est jamais insérée après ma commande bcp. C'est toujours la chaîne vide de length = 0.
Note n°3 : Notez que j'utilise bien le paramètre -k dans ma commande bcp. http://msdn.microsoft.com/en-us/libr...ql.100%29.aspx
Comment faire pour insérer des valeur NULL pour des champs de type varchar nullable ?
Partager