Eroare de conversie a datelor de încărcare în timp ce importați date DATETIME

Am găsit câteva postări pe această temă despre StackOverflow, dar nici unul nu pare să-mi rezolve problema.

Încerc să configurez importurile în vrac pentru SQL Server 2008 Express și nu reușește să importe valorile datetime . Problema pare a fi atât de importantă încât trebuie să lipsesc ceva foarte simplu și sper că altcineva poate prinde problema.

Problema

Im import în acest tabel:

CREATE TABLE [dbo].[BulkTest](
    [ReportDate] [datetime] NOT NULL
)

Acesta este fișierul meu format (BulkTest.fmt):

10.0
1
1       SQLDATETIME   0       0       "\r\n"   1     ReportDate                                 ""

Acestea sunt datele importate (BulkTest.tab):

ReportDate
2010-12-31
2011-01-31

Aceasta este declarația de import:

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FORMATFILE='Q:\...\BulkTest.fmt',
    FIRSTROW=1,
    DATAFILETYPE='char'
    );

Acestea sunt erorile:

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ReportDate).
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (ReportDate).
Msg 4832, Level 16, State 1, Line 1

Am încercat

  • Modificarea formatului de dată, inclusiv 12/31/2010 , 31/12/2010 , 20101231 , -31 00:00:00 , precum și diverse alte formate.
  • Adăugarea/ștergerea/schimbarea opțiunilor de inserare în bloc pentru , TABLOCK , CHECK_CONSTRAINTS
  • Schimbarea delimitatorului și a dimensiunii câmpului în fișierul format (deși pe MSDN, dimensiunea câmpului nu trebuie să conteze).
  • Rularea SET DATEFORMAT ymd .
  • Verificarea fișierului importat cu editorul hex pentru a vă asigura că acesta conține într-adevăr caractere pe 8 biți și nu unicode; conține exact ceea ce este prezentat în format ASCII.

Vreo idee?

0

3 răspunsuri

Acesta este formatul care funcționează în codul meu:

08/17/2000 16:32:32

Producătorul este .NET, ToString (DateTimeFormatInfo.InvariantInfo) .

0
adăugat
Acest format funcționează pentru mine destul de mult în toate cazurile, cu excepția cazului descris mai sus. Bănuiesc că aceasta poate fi o problemă care nu are legătură cu formatul datei în mod specific, ci mai degrabă are importanța introducerii datelor (de exemplu, poate să trunchiezi data undeva sau să faci altceva fără ao realiza).
adăugat autor ikh, sursa

De ce aveți nevoie de un fișier format pentru acest lucru? Ce se întâmplă când nu îl folosiți?

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FIRSTROW=1,
    DATAFILETYPE='char',
    ROWTERMINATOR='\r\n'
);
0
adăugat
Acesta este un caz simplificat al unei probleme pe care o aveam cu o inserție în vrac în care aveam nevoie de un fișier de format (30 de coloane în tabel, doar 15 coloane din datele importate și unele dintre ele sunt necorespunzătoare). Pentru acest post, am redus problema la cel mai simplu caz care produce aceeași eroare.
adăugat autor ikh, sursa
Interesant, eliminarea fișierului format încă cauzează aceeași problemă.
adăugat autor ikh, sursa
Colaționarea este Latin1_General_CI_AS . Am încercat adăugarea/eliminarea opțiunilor WITH , inclusiv CHECK_CONSTRAINTS și DATAFILETYPE, și am încercat diverse combinații ale acestora și încă produce aceeași eroare.
adăugat autor ikh, sursa
Care este colaționarea serverului/bazei de date? Ce se întâmplă dacă renunțați la opțiunile CHECK_CONSTRAINTS și DATAFILETYPE?
adăugat autor Aaron Bertrand, sursa

Îmi pare rău că am întârziat la petrecere, dar sper că poate ajuta și un alt suflet sărac.

Oricum, am descoperit aceeași eroare la utilizarea fișierului format.

În loc de tipul SQLDATE am folosit SQLCHAR și lungimea.

2015-01-01 = lungime 10

11,0

     

1

     

1 SQLCHAR 0 10 "\ r \ n" 1 my_date ""

0
adăugat