Sdílet prostřednictvím


Určení ukončovačů polí a řádků (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

U datových polí znaků umožňují volitelné ukončovací znaky označit konec každého pole v datovém souboru ukončovacím znakem a konec každého řádku s ukončovacím znakem řádku. Ukončovací znaky představují jeden způsob, jak označit programy, které čtou datový soubor, kde končí jedno pole nebo řádek a začíná jiné pole nebo řádek.

Důležitý

Při použití nativního nebo Unicode nativního formátu použijte místo ukončovačů polí délkovou předponu. Data nativního formátu můžou být v konfliktu s ukončovacími moduly, protože datový soubor nativního formátu je uložený v interním binárním formátu Microsoft SQL Serveru.

Znaky podporované jako ukončovací znaky

bcp příkaz, příkaz BULK INSERT a zprostředkovatel hromadné sady řádků OPENROWSET podporují různé znaky jako ukončovací znaky pole nebo řádku a vždy hledají první instanci každého ukončovacího znaku. Následující tabulka uvádí podporované znaky pro ukončovací znaky.

Ukončovací znak Vyznačeno
Tabulátor \t

Toto je výchozí ukončovací znak pole.
Znak nového řádku \n

Toto je výchozí ukončovací znak řádku.
Návrat vozíku/nový řádek \r
Zpětné lomítko* \|
Ukončovací znak null (nevisitelný ukončovací znak)** \0
Libovolný tisknutelný znak (řídicí znaky nelze vytisknout, s výjimkou null, tabulátoru, nového řádku a návratu na začátek řádku) (*, A, t, l, atd.)
Řetězec až 10 tisknutelných znaků, včetně některých nebo všech ukončovacích znaků uvedených výše (**\t**, konec , !!!!!!!!!, \t-\n, atd.)

*Pouze znaky t, n, r, 0 a '\0' pracují s řídicím znakem zpětného lomítka a vytvářejí řídicí znak.

**I když není při tisku viditelný znak ovládacího prvku null (\0), je to jedinečný znak v datovém souboru. To znamená, že použití znaku ovládacího prvku null jako ukončovací znak pole nebo řádku se liší od toho, že nemáte vůbec žádné pole nebo ukončovací znak řádku.

Důležitý

Pokud v datech dojde k ukončovacímu znaku, interpretuje se jako ukončovací znak, nikoli jako data, a data za tímto znakem se interpretují jako patřící do dalšího pole nebo záznamu. Proto pečlivě zvolte své ukončovací znaky, abyste měli jistotu, že se nikdy v datech neobjeví. Například nízký náhradní znak by nebyl dobrou volbou jako koncový znak, pokud data obsahují ten nízký náhradní znak.

Použijte ukončovače řádků

Ukončovací znak řádku může být stejný jako ukončovací znak posledního pole. Obecně však je užitečný jedinečný ukončovací znak řádku. Pokud chcete například vytvořit tabulkový výstup, ukončete poslední pole v každém řádku znakem nového řádku (\n) a všechna ostatní pole se znakem tabulátoru (\t). Pokud chcete každý datový záznam umístit na vlastní řádek v datovém souboru, zadejte kombinaci \r\n jako ukončovací znak řádku.

Poznámka

Když použijete bcp interaktivně a jako ukončovací znak řádku zadáte \n (nový řádek), bcp automaticky přidá jako předponu znak \r (návrat na začátek řádku), což má za následek ukončovací znak \r\n.

Určení ukončovačů pro hromadný export

Při hromadném exportu znak nebo nchar dat a chcete použít jiný než výchozí ukončovací znak, je nutné zadat ukončovací znak do příkazu bcp. Ukončovací nástavce můžete určit některým z následujících způsobů:

  • Soubor formátu, který specifikuje ukončovací znak pro jednotlivá pole.

    Poznámka

    Informace o tom, jak používat formátové soubory, naleznete v tématu Formátovat soubory pro import nebo export dat (SQL Server).

  • Bez formátu souboru existují následující alternativy:

    • Pomocí přepínače -t určit ukončovací znak pole pro všechna pole kromě posledního pole v řádku a pomocí přepínače -r určit ukončovací znak řádku.

    • Použití přepínače formátu znaků (-c nebo -w) bez přepínače -t, který nastaví koncový znak pole na znak tabulátoru \t. To je stejné jako určení -t\t.

      Poznámka

      Pokud zadáte přepínač -n (nativní data) nebo -N (nativní kódování Unicode), ukončovací znaky se nevloží.

    • Pokud interaktivní příkaz bcp obsahuje možnost v nebo ven bez přepínače formátového souboru (-f) nebo přepínače formátu dat (-n, -c, -w, nebo -N) a rozhodnete se nezadávat délku předpony a délku pole, příkaz vyzve k zadání ukončovače pole pro každé pole, přičemž výchozí hodnota je žádná.

      Enter field terminator [none]:

      Obecně platí, že výchozí možností je vhodná volba. Avšak pro znak nebo nchar datových polí vizte následující pododdíl "Pokyny pro používání ukončovačů". Pro příklad ukazující tuto výzvu v kontextu, vizte Zadat formáty dat pro kompatibilitu při použití bcp (SQL Server).

      Poznámka

      Jakmile interaktivně zadáte všechna pole v příkazu bcp, příkazový řádek uloží odpovědi pro každé pole v souboru bez formátu XML. Další informace o formátových souborech jiného formátu než XML naleznete v tématu soubory formátu NEŽ XML (SQL Server).

Pokyny pro používání ukončovačů

V některých situacích je terminátor užitečný pro char nebo nchar datové pole. Například:

  • Pro datový sloupec, který obsahuje hodnotu null v datovém souboru, který bude importován do programu, který nerozumí informacím o délce předpony.

    Každý datový sloupec, který obsahuje hodnotu null, se považuje za proměnnou délku. Při absenci délky předpony je k identifikaci konce pole s hodnotou null nutný ukončovací znak a ujistěte se, že jsou data správně interpretována.

  • Pro dlouhý sloupec s pevnou délkou, jehož mezera je používána pouze částečně mnoha řádky.

    V této situaci může zadání ukončujícího prvku minimalizovat prostor úložiště, což umožní, aby se pole považovalo za pole s proměnnou délkou.

Specifikovat \n jako ukončovač řádku pro hromadný export

Když zadáte \n jako ukončovací znak řádku pro hromadný export nebo implicitně použijete výchozí ukončovací znak řádku, bcp vypíše kombinaci návratového řádku řádku (CRLF) jako ukončovací znak řádku. Pokud chcete jako ukončovací znak řádku (LF) vypisovat pouze znak odřádkování (LF), jak je obvyklé na počítačích se systémy Unix a Linux, použijte šestnáctkový zápis k určení ukončovače řádku LF. Například:

bcp -r '0x0A'

Příklady

Tento příklad hromadně exportuje data z tabulky AdventureWorks.HumanResources.Department do datového souboru Department-c-t.txt pomocí formátu znaku, přičemž jako ukončovací znak řádku je čárka a znak nového řádku (\n).

Příkaz bcp obsahuje následující přepínače.

Vypínač Popis
-c Určuje, že se datová pole načtou jako znaková data.
-t, Určuje čárku (,) jako ukončovací znak pole.
-r \n Určuje ukončovací znak řádku jako znak pro nový řádek. Toto je výchozí ukončovací znak řádku, takže zadání je volitelné.
-T Určuje, že nástroj bcp se připojí k SQL Serveru pomocí důvěryhodného připojení a integrovaného zabezpečení. Pokud není zadaný -T, je nutné zadat -U a -P pro úspěšné přihlášení.

Další informace naleznete v tématu bcp Utility.

Na příkazovém řádku Microsoft Windows zadejte:

bcp AdventureWorks.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

Tím se vytvoří Department-c-t.txt, který obsahuje 16 záznamů se čtyřmi poli. Pole jsou oddělená čárkou.

Určení ukončovacích příkazů pro hromadný import

Při hromadném importu dat typu char nebo nchar musí příkaz hromadného importu rozpoznat ukončovací znaky, které se používají v datovém souboru. Způsob zadání ukončovačů závisí na příkazu hromadného importu následujícím způsobem:

  • bcp

    Určení ukončovačů pro operaci importu používá stejnou syntaxi jako operace exportu. Další informace naleznete v části "Určení ukončovacího znaku pro hromadný export" v předchozí části tohoto tématu.

  • HROMADNÉ VLOŽENÍ

    Ukončovače lze zadat pro jednotlivá pole v rámci formátu souboru nebo pro celý datový soubor pomocí specifikátorů zobrazených v následující tabulce.

    Kvalifikátor Popis
    FIELDTERMINATOR ='field_terminator' Určuje ukončovací znak pole, který se má použít pro datové soubory znaků Unicode.

    Výchozí hodnota je \t (znak tabulátoru).
    ROWTERMINATOR ='row_terminator' Určuje ukončovací znak řádku, který se má použít pro datové soubory znaků Unicode.

    Výchozí hodnota je \n (znak nového řádku).

    Další informace naleznete v části BULK INSERT (Transact-SQL).

  • VLOŽIT... SELECT * FROM OPENROWSET(BULK...)

    Pro zprostředkovatele hromadné sady řádků OPENROWSET lze ukončovací znaky zadat pouze ve formátovém souboru (který je povinný kromě datových typů velkých objektů). Pokud datový soubor znaku používá jiný než výchozí ukončovací znak, musí být definován ve formátu souboru. Další informace najdete v tématu Vytvoření souboru formátu (SQL Server) a Použití formátového souboru k hromadnému importu dat (SQL Server).

    Další informace o klauzuli OPENROWSET BULK naleznete v tématu OPENROWSET (Transact-SQL).

Určete \n jako ukončovač řádku pro hromadný import

Když zadáte \n jako ukončovací znak řádku pro hromadný import nebo implicitně použijete výchozí ukončovací znak řádku, bcp a příkaz BULK INSERT očekávají jako ukončovací znak řádku kombinaci návratového řádku řádku (CRLF). Pokud zdrojový soubor používá jako ukončovací znak řádku pouze znak pro nový řádek (LF) - jak je obvyklé v souborech generovaných na počítačích s Unix a Linux systémy - použijte šestnáctkový zápis k určení LF jako ukončovacího znaku řádku. Například v příkazu BULK INSERT:

 ROWTERMINATOR = '0x0A'

Příklady

Příklady v této části hromadně importují znaková data z datového souboru Department-c-t.txt vytvořeného v předchozím příkladu do tabulky myDepartment v ukázkové databázi AdventureWorks2022. Před spuštěním příkladů je nutné vytvořit tuto tabulku. Pokud chcete vytvořit tuto tabulku ve schématu dbo, spusťte v editoru dotazů aplikace SQL Server Management Studio následující kód:

USE AdventureWorks2022;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment
(DepartmentID smallint,
Name nvarchar(50),
GroupName nvarchar(50) NULL,
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
GO

A. Použijte bcp pro interaktivní specifikaci ukončovačů

Následující příklad hromadně importuje datový soubor Department-c-t.txt pomocí příkazu bcp. Tento příkaz používá stejné přepínače příkazů jako příkaz hromadného exportu. Další informace naleznete v části "Určení ukončovací funkce pro hromadný export", dříve v tomto tématu.

Na příkazovém řádku Windows zadejte:

bcp AdventureWorks2022..myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B. Použijte BULK INSERT k interaktivnímu určení oddělovačů

Následující příklad hromadně importuje datový soubor Department-c-t.txt pomocí příkazu BULK INSERT, který používá kvalifikátory uvedené v následující tabulce.

Možnost Atribut
DATAFILETYPE ='char' Určuje, že je třeba datová pole načíst jako znaková data.
FIELDTERMINATOR =',' Určuje jako ukončovací znak pole čárku (,).
ROWTERMINATOR ='\n' Určuje ukončovací znak řádku jako znak nového řádku.

V editoru dotazů aplikace SQL Server Management Studio spusťte následující kód:

USE AdventureWorks2022;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
     WITH (
     DATAFILETYPE = 'char',
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n'
);
GO

Další kroky