Mezőterminátor-probléma a formátumfájlokban

Van egy txt formátumú adatfájlom, amelyet a Tömeges beillesztéssel töltöttem be a következő paranccsal:

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

A kód jól működik. Miközben megpróbáltam egy formátumfájlt tömeges beszúrással használni a fájl betöltéséhez, néhány problémába ütköztem az utolsó sor mezőterminátorának megadásával.

Itt található az utolsó sor specifikációja a fájl formátum:

21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS 

Ha a “0x0a” terminátor, a következő hibát kapom:

Tömeges adatátalakítási hiba (csonkolás) a 2. sor 1. oszlopához (var1).

A “\ n” használatával az adatok betöltött, de “|” az utolsó oszlopba is betöltődik. Például kapok “0,5 |” “0.5” helyett.

“| \ n”, “0x0a”, “| 0x0a”, “\ r \ n” ugyanazt a hibát adja vissza, mint “|”

Tömeges adatátalakítási hiba (csonkolás) a 2. sor 1. oszlopához (var1).

I ” m az sql-server 2016, Windows 10 64bit használatával.

Tudna valaki segíteni ebben? Előre is köszönöm a segítségét!

Jason

Hozzászólások

  • Mivel ' most feltett néhány kérdést ezzel kapcsolatban, nézze meg ezt az oldalt: sommarskog.se/bulkload.html
  • @sp_BlitzErik, köszönöm a válaszod! Ez a cikk nagyon hasznos és sokkal több információt nyújt, mint az MSDN webhely. A 4.1. , Összetévesztettem a terepi terminátorral " \ " \ r \ n ", az idézet a jegyzet valóban teljes, ez egy típus?
  • Ha jól emlékszem, ' egy menekülési sorrend. Ha továbbra is reagálsz az ott ding ' jobb magyarázatot ad le lentebb.

Válasz

Miután egész nap küzdöttem a Line Feed / Hex kóddal, végül rájöttem, hogy problémámat a formátumfájlok hiányzó oszlopai okozzák. Az adatkészlet számomra új, és azt gondoltam, hogy 21 soros, míg valójában 22 soros. Ez az oka annak, hogy az sql szerver folyamatosan betöltötte az utolsó “|” fájlt az adatfájlból.

Itt talál egy hivatkozást azoknak, akik esetleg érdeklik az adatfájlok UNIX rendszerből történő betöltését a Windows-tól eltérő soros terminátorokkal. módszerek:

  1. használjon tömeges beszúrást, és állítsa a sorvégződést “0x0a” értékre.
  2. formátumfájlt használjon, és az utolsó mező mezőterminálját állítsa “\ n “.
  3. Használjon dinamikus sql-t a Char (10) függvénnyel a sorcsatorna (LF) beillesztéséhez a parancssorba, majd hajtsa végre a () parancssort.

Mielőtt megpróbálná ezeket a módszereket, használjon jegyzettömböt az összes vezérlő karakter megjelenítéséhez, hogy megerősítse a szövegfájlok által használt vezérlő karaktereket.

Ha ezek a módszerek nem működnek az Ön számára, akkor a soron kívül más problémák is jelentkezhetnek. feed / sor terminátor.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük