Field Terminator Problém ve formátu souborů

Mám datový soubor ve formátu txt a použil jsem jej načíst pomocí hromadného vložení v následujícím příkazu:

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

Kód funguje dobře. Když jsem se však pokoušel použít soubor formátu s hromadnou vložkou k načtení souboru, narazil jsem na určité problémy se specifikováním zakončení pole pro poslední řádek.

Zde je specifikace posledního řádku v formát souboru:

21 SQLCHAR 0 20 "0x0a" 21 misc_costs SQL_Latin1_General_CP1_CI_AS 

S terminálem „0x0a“ se zobrazí následující chyba:

Chyba převodu dat hromadného načtení (zkrácení) pro řádek 2, sloupec 1 (var1).

S „\ n“ mohou data být načten, ale „|“ je také načten v posledním sloupci. Například dostanu „0,5 |“ místo „0,5“.

„| \ n“, „0x0a“, „| 0x0a“, „\ r \ n“ vrací stejnou chybu jako „|“

Chyba převodu dat hromadného načtení (zkrácení) pro řádek 2, sloupec 1 (var1).

I “ m pomocí serveru sql-server 2016, Windows 10 64bit.

Může s tím někdo pomoci? Za vaši pomoc předem děkujeme!

Jason

Komentáře

  • Jelikož jste ' položili o tom několik otázek, podívejte se na tuto stránku: sommarskog.se/bulkload.html
  • @sp_BlitzErik, děkuji za odpověď! Tento článek je velmi užitečný a poskytuje mnohem více informací než web MSDN. Při čtení příkladu v části 4.1 , Zaměnil jsem se s terminátorem pole " \ " \ r \ n ", citát je poznámka opravdu kompletní, je to typ?
  • Pokud si dobře pamatuji, je to ' úniková sekvence. ding there ' je lepší vysvětlení dále dolů.

Odpověď

Po celodenním boji s kódem Line Feed / Hex jsem konečně zjistil, že můj problém byl způsoben chybějícími sloupci ve formátu souborů. Datová sada je pro mě nová a myslel jsem si, že má 21 řádků, zatímco ve skutečnosti má 22 řádků. Proto sql server stále načítal poslední „|“ z datového souboru.

Zde je odkaz pro ostatní, kteří by se mohli zajímat o načítání datového souboru ze systému UNIX se zakončovacími řádky odlišnými od Windows, existují tři metody:

  1. použít hromadné vložení a nastavit zakončení řádku na „0x0a“.
  2. použít formátovací soubor a nastavit zakončení pole posledního pole na „\ n „.
  3. Použijte dynamický sql s funkcí Char (10) pro vložení řádku (LF) do příkazového řetězce a poté proveďte () příkazový řetězec.

Než vyzkoušíte tyto metody, použijte poznámkový blok k zobrazení všech řídicích znaků k potvrzení řídicích znaků použitých v textových souborech.

Pokud pro vás žádná z těchto metod nefunguje, můžete mít kromě řádku i jiné problémy zakončení zdroje / řádku.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *