Field Terminator Problem in Format Files

Am un fișier de date în format txt și îl încărcam cu Bulk Insert în următoarea comandă:

Bulk insert [table1] FROM "data.txt" WITH ( FIELDTERMINATOR ="|", ROWTERMINATOR ="0x0a", ) 

Codul funcționează bine. Cu toate acestea, în timp ce încercam să folosesc un fișier format cu inserția în bloc pentru a încărca fișierul, am întâmpinat câteva probleme la specificarea terminatorului de câmp pentru ultimul rând.

Iată specificațiile pentru ultimul rând din format fișier:

21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS 

Având „0x0a” ca terminator, primesc următoarea eroare:

Eroare de conversie a datelor de încărcare în bloc (trunchiere) pentru rândul 2, coloana 1 (var1).

Cu „\ n”, datele pot să fie încărcat, dar „|” este încărcat și în ultima coloană. De exemplu, primesc „0,5 |” în loc de „0,5”.

„| \ n”, „0x0a”, „| 0x0a”, „\ r \ n” returnează aceeași eroare ca „|”

Eroare de conversie a datelor de încărcare în bloc (trunchiere) pentru rândul 2, coloana 1 (var1).

I ” Folosesc SQL Server 2016, Windows 10 64bit.

Poate cineva să vă ajute? Mulțumesc anticipat pentru ajutor!

Jason

Comentarii

  • Deoarece ' ați pus câteva întrebări despre aceasta acum, aruncați această pagină o privire: sommarskog.se/bulkload.html
  • @sp_BlitzErik, vă mulțumim pentru răspuns! Acest articol este foarte util și oferă mult mai multe informații decât site-ul MSDN. În timp ce citiți exemplul de la 4.1 , M-am confundat cu terminatorul de câmp " \ " \ r \ n ", citatul este notă complet completă, este un tip?
  • Dacă îmi amintesc corect, ' este o secvență de evadare. Dacă păstrați rea ding acolo ' o explicație mai bună mai jos.

Răspuns

După o zi întreagă luptându-mă cu linia de alimentare / cod Hex, am constatat că problema mea a fost cauzată de lipsa coloanelor din fișierele format. Setul de date este nou pentru mine și am crezut că are 21 de rânduri, în timp ce are 22 de rânduri. Acesta este motivul pentru care serverul sql a încărcat ultimul „|” din fișierul de date.

Iată o referință pentru alții care ar putea fi interesați să încarce fișierul de date din sistemul UNIX cu terminatori de rând diferiți de Windows, există trei metode:

  1. utilizați insertul în bloc și setați terminatorul de rând ca „0x0a”.
  2. utilizați un fișier format și setați terminatorul de câmp al ultimului câmp ca „\ n „.
  3. Utilizați un sql dinamic cu funcția Char (10) pentru a insera feedul de linie (LF) în șirul de comandă și apoi executați () șirul de comandă.

Înainte de a încerca aceste metode, utilizați un notepad pentru a afișa toate caracterele de control pentru a confirma caracterele de control utilizate de fișierele text.

Dacă niciuna dintre aceste metode nu funcționează pentru dvs., este posibil să aveți alte probleme decât linia terminator feed / rând.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *