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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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          ""
Lorsque j’essaye de faire la commande

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

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
Si je change mon fichier data avec


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.)
Ç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 : 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
Ca marche aussi.
Pourquoi, comment ca peut marcher dans un cas et pas dans l'autre ???