Bonsoir,
Je suis en train de chercher comment je peux faire pour importer un fichier avec plus de 20 millions de ligne avec la commande bcp.
Mon problème est sur le format date, Les développeur me fournissent un fichier .csv avec comme une virgule comme séparateur et line feed comme fin de ligne. Pour simplifier, j’ai deux colonnes id int , dateT datetime.
La table
Le fichier data (attention avec un retour à la ligne type unix line feed)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TABLE [dbo].[T0]( [id] [int] null, [datet] [datetime] NULL )
Voici mon fichier de format
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1,2012-oct-02
Lorsque j’essaye de faire la commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 10.0 2 1 SQLCHAR 0 12 "," 1 id "" 2 SQLCHAR 0 24 "\n" 2 datet ""
Code : Sélectionner tout - Visualiser dans une fenêtre à part bcp dbtest.dbo.T0 in data.bcp -T -f format.fmt
J’ai comme resultat
Si je change mon fichier data avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Starting copy... SQLState = 22005, NativeError = 0 Error = [Microsoft][SQL Server Native Client 10.0]Invalid character value for cast specification SQLState = 22005, NativeError = 0 Error = [Microsoft][SQL Server Native Client 10.0]Invalid character value for cast specification 0 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1,2012-09-02
Ça marche mais comme le fichier vient d’un gros système dans lequel je ne peux pas changer le format date, je dois le faire passer avec ce format 2012-oct-02. Est ce possible avec vous un autre truc ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 C:\Temp>bcp dbtest.dbo.T0 in data.bcp -T -f format.fmt Starting copy... 1 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 1 Average : (1000.00 rows per sec.)
Merci de votre aide
PS: bulk copy du SSIS ,ca marche dans les deux cas.
et ce qui est étrange
En TSQL
Ca marche aussi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1234 BULK INSERT dbo.T0 FROM 'C:\Temp\data.bcp' WITH (FORMATFILE = 'C:\Temp\format.fmt'); GO
Pourquoi, comment ca peut marcher dans un cas et pas dans l'autre ???
Partager