[BCP] BCP et format de datetime
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
Code:
1 2 3 4
| CREATE TABLE [dbo].[T0](
[id] [int] null,
[datet] [datetime] NULL
) |
Le fichier data (attention avec un retour à la ligne type unix line feed)
Voici mon fichier de format
Code:
1 2 3 4
| 10.0
2
1 SQLCHAR 0 12 "," 1 id ""
2 SQLCHAR 0 24 "\n" 2 datet "" |
Lorsque j’essaye de faire la commande
Code:
bcp dbtest.dbo.T0 in data.bcp -T -f format.fmt
J’ai comme resultat
Code:
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 |
Si je change mon fichier data avec
Code:
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.) |
Ç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 ?
Merci de votre aide
PS: bulk copy du SSIS ,ca marche dans les deux cas.
et ce qui est étrange
En TSQL
Code:
1 2 3 4 5 6 7 8
|
Code:
1234 | BULK INSERT dbo.T0
FROM 'C:\Temp\data.bcp'
WITH (FORMATFILE = 'C:\Temp\format.fmt');
GO |
|
Ca marche aussi.
Pourquoi, comment ca peut marcher dans un cas et pas dans l'autre ???