Sdílet prostřednictvím


Zadání ukončovačů polí a řádků (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricÚložiště v Microsoft Fabric

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.

Important

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

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

Ukončovací znak Označeno Description
Tab \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 1 \
Ukončovací znak null (neviditelný terminátor) 2 \0
Libovolný tisknutelný znak (řídicí znaky se nedají 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**, end, !!!!!!!!!!, \t-\n, atd.)

1 Pouze znaky t, n, r, 0 a \0 fungují se zpětným lomítkem jako řídicí znak k vytvoření kontrolního znaku.

2 I když při tisku není znak ovládacího prvku null (\0) viditelný, 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.

Important

Pokud v datech dojde k ukončovacímu znaku, znak se interpretuje 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í pár není dobrou volbou jako ukončovací znak pole, pokud data obsahují ten nízký náhradní pár.

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 znakem nového řádku (\n) poslední pole v každém řádku a znakem tabulátoru (\t) všechna ostatní pole. 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.

Note

Když použijete bcp interaktivně a zadáte \n (nový řádek) jako ukončovací znak řádku, bcp automaticky přidává znak \r (návrat na začátek řádku) jako předponu, 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.

    Note

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

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

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

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

      Note

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

    • Pokud interaktivní příkaz bcp obsahuje možnost in nebo out 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 nespecifikovat délku předpony a délku pole, příkaz se dotáže na ukončovací znak každého pole s výchozím nastavením žádného:

      Enter field terminator [none]:

      Obecně platí, že výchozí možností je vhodná volba. U datových polí typu char nebo nchar se však podívejte na následující pododdíl "Pokyny pro používání ukončovačů". Příklad znázorňující tuto výzvu v kontextu najdete v tématu Určení formátů dat kompatibility při použití nástroje bcp (SQL Server).

      Note

      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ých než XML naleznete v tématu Použití souborů formátu JINÉ 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ý se naimportuje 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.

Zadejte \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'

Examples

Tento příklad hromadně exportuje data z tabulky AdventureWorks2022.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.

Switch Description
-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 -T není zadáno, musíte zadat -U a -P, abyste se mohli úspěšně přihlásit.

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

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

bcp AdventureWorks2022.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í oddělovačů 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 tématu Určení ukončovačů pro hromadný export, dříve v tomto článku.

  • BULK INSERT

    Oddělovače lze zadat pro jednotlivá pole v souboru formátu nebo pro celý datový soubor pomocí kvalifikátorů zobrazených v následující tabulce.

    Qualifier Description
    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 tématu HROMADNÉ VLOŽENÍ.

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    OPENROWSET U poskytovatele hromadné sady řádků lze terminátory specifikovat pouze ve formátovém souboru (který je vyžadován s výjimkou 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 (BULK).

Určete \n jako ukončovací znak řá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í kombinaci návratu vozíku a posunu řádku (CRLF) jako ukončovací znak řádku. Pokud váš zdrojový soubor jako ukončovací znak řádku používá pouze znak pro ukončení řádku (LF), jak je obvyklé v souborech generovaných na počítačích s operačními systémy Unix a Linux, použijte šestnáctkový zápis k označení LF jako ukončovače řádku. Například v BULK INSERT příkazu:

ROWTERMINATOR = '0x0A'

Examples

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 AdventureWorks2025. Před spuštěním příkladů je nutné vytvořit tuto tabulku. Pokud chcete vytvořit tuto tabulku pod schématem, spusťte v editoru dbo 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 CONSTRAINT
        DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
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 tématu Určení ukončovačů pro hromadný export, dříve v tomto článku.

Do příkazového řádku systému Windows zadejte následující příkaz:

bcp AdventureWorks2022.dbo.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.

Option Attribute
DATAFILETYPE = 'char' Určuje, že se datová pole načtou jako znaková data.
FIELDTERMINATOR = ',' Určuje jako ukončovací znak pole čárku (,).
ROWTERMINATOR = '\n' Určuje ukončovací znak řádku jako znak pro nový řádek.

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