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:
- használjon tömeges beszúrást, és állítsa a sorvégződést “0x0a” értékre.
- formátumfájlt használjon, és az utolsó mező mezőterminálját állítsa “\ n “.
- 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.