Udostępnij za pośrednictwem


Określanie terminatorów pól i wierszy (SQL Server)

Dotyczy:programu SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft Fabric

Dla pól danych znaków, opcjonalne znaki końcowe pozwalają na oznaczenie końca każdego pola w pliku danych za pomocą terminatora pola i końca każdego wiersza za pomocą terminatora wiersza . Znaki zakończenia są jednym ze sposobów wskazywania programów odczytujących plik danych, w którym kończy się jedno pole lub wiersz, a drugie pole lub wiersz rozpoczyna się.

Important

W przypadku korzystania z natywnego lub natywnego formatu Unicode użyj prefiksów długości, a nie terminatorów pól. Dane formatu natywnego mogą powodować konflikt z terminatorami, ponieważ plik danych w formacie natywnym jest przechowywany w wewnętrznym formacie binarnym programu Microsoft SQL Server.

Znaki obsługiwane jako terminatory

Polecenie bcp, BULK INSERT instrukcja i OPENROWSET dostawca zestawów wierszy zbiorczych obsługują różne znaki jako znaczniki końca pól lub wierszy i zawsze wyszukują pierwsze wystąpienie każdego znacznika. W poniższej tabeli wymieniono obsługiwane znaki dla terminatorów.

Terminating character Indicated by Description
Tab \t Jest to domyślny terminator pól.
Newline character \n Jest to domyślny terminator wierszy.
Powrót karetki/kanał liniowy \r
Backslash 1 \
Terminator o wartości null (niewidoczny terminator) 2 \0
Dowolny znak drukowalny (znaki kontrolne nie są drukowalne, z wyjątkiem znaku zerowego, tabulacji, nowego wiersza i powrotu karetki) (*, A, t, li tak dalej)
Ciąg zawierający maksymalnie 10 znaków nadających się do druku, w tym niektóre lub wszystkie wymienione wcześniej znaki końcowe (**\t**, end, !!!!!!!!!!, \t-\ni tak dalej)

1 Tylko znaki t, n, r, 0 oraz \0 działają z znakiem ucieczki, aby utworzyć znak sterujący.

2 Mimo że znak kontrolki o wartości null (\0) nie jest widoczny podczas drukowania, jest to odrębny znak w pliku danych. Oznacza to, że używanie znaku kontrolki o wartości null jako pola lub terminatora wiersza różni się od braku w ogóle pola ani terminatora wierszy.

Important

Jeśli znak terminatora występuje w danych, znak jest interpretowany jako terminator, a nie jako dane, a dane po tym znaku są interpretowane jako należące do następnego pola lub rekordu. W związku z tym należy starannie wybrać terminatory, aby upewnić się, że nigdy nie pojawiają się w danych. Na przykład niski terminator pola zastępczego nie jest dobrym wyborem dla terminatora pola, jeśli dane zawierają ten niski zastępca.

Używanie terminatorów wierszy

Terminator wiersza może być tym samym znakiem co terminator ostatniego pola. Jednak ogólnie rzecz biorąc, odrębny terminator wiersza jest przydatny. Na przykład, aby wygenerować dane wyjściowe tabelaryczne, zakończ ostatnie pole w każdym wierszu znakiem nowego wiersza (\n) i wszystkie inne pola znakiem tabulacji (\t). Aby umieścić każdy rekord danych we własnym wierszu w pliku danych, określ kombinację \r\n jako terminator wierszy.

Note

Jeśli używasz narzędzia bcp interaktywnie i określasz \n (nowy wiersz) jako terminator wierszy, narzędzie bcp automatycznie poprzedza go znakiem \r (powrotu karetki), co powoduje zakończenie wiersza \r\n.

Określ terminatory dla eksportu zbiorczego

Podczas zbiorczego eksportowania danych char lub nchar i chcesz użyć niestandardowego terminatora, musisz określić terminator w poleceniu bcp. Terminatory można określić na dowolny z następujących sposobów:

  • Za pomocą pliku formatu, który określa terminator dla każdego pola z osobna.

    Note

    Aby uzyskać informacje o sposobie używania plików formatu, zobacz Formatowanie plików do importowania lub eksportowania danych (SQL Server).

  • Bez pliku formatu istnieją następujące alternatywy:

    • Użyj przełącznika -t , aby określić terminator pola dla wszystkich pól z wyjątkiem ostatniego pola w wierszu i przy użyciu przełącznika -r w celu określenia terminatora wiersza.

    • Użyj przełącznika formatu znaków (-c lub -w) bez przełącznika -t, który ustawia terminator pola na znak tabulacji\t. Jest to to samo, co określenie -t\t.

      Note

      Jeśli określisz przełącznik -n (dane natywne) lub -N (natywny Unicode), terminatory nie zostaną wstawione.

    • Jeśli interakcyjne polecenie bcp zawiera opcję in lub out bez przełącznika pliku formatu (-f) lub przełącznika formatu danych (-n, -c, -w, lub -N), i nie chcesz określać długości prefiksu oraz długości pola, polecenie poprosi o zdefiniowanie terminatora dla każdego pola, z domyślną wartością 'brak'.

      Enter field terminator [none]:

      Ogólnie rzecz biorąc, wartość domyślna jest odpowiednim wyborem. Jednak w przypadku pól danych char lub nchar zobacz następującą podsekcję "Wytyczne dotyczące używania terminatorów". Aby zobaczyć przykład pokazujący ten monit w kontekście, zobacz Określanie formatów danych zgodności podczas korzystania z narzędzia bcp (SQL Server).

      Note

      Po interakcyjnym określeniu wszystkich pól w poleceniu bcp, zostaniesz poproszony o zapisanie odpowiedzi dla każdego pola w pliku w formacie innym niż XML. Aby uzyskać więcej informacji na temat plików formatu innego niż XML, zobacz Use Non-XML format files (SQL Server) (Używanie plików w formacie non-XML (SQL Server).

Wskazówki dotyczące używania terminatorów

W niektórych sytuacjach terminator jest przydatny w przypadku znaku lub nchar pola danych. For example:

  • W przypadku kolumny danych zawierającej wartość null w pliku danych, który zostanie zaimportowany do programu, który nie rozumie informacji o długości prefiksu.

    Każda kolumna danych zawierająca wartość null jest uznawana za zmienną długość. W przypadku braku długości prefiksów terminator jest niezbędny do zidentyfikowania końca pola o wartości null, upewniając się, że dane są prawidłowo interpretowane.

  • W przypadku długiej kolumny o stałej długości, której przestrzeń jest używana tylko częściowo przez wiele wierszy.

    W takiej sytuacji określenie terminatora może zminimalizować ilość miejsca do magazynowania, dzięki czemu pole będzie traktowane jako pole o zmiennej długości.

Określ \n jako terminator wierszy dla eksportu zbiorczego

Jeśli określisz \n jako terminator wierszy dla eksportu zbiorczego lub niejawnie użyjesz domyślnego terminatora wierszy, narzędzie bcp wyprowadza kombinację zestawienia wiersza powrotnego karetki (CRLF) jako terminator wiersza. Jeśli chcesz wyświetlić tylko znak przejścia do nowej linii (LF) jako terminator wiersza — co jest typowe na komputerach z systemami Unix i Linux — użyj notacji szesnastkowej, aby określić terminator wiersza LF. For example:

bcp -r '0x0A'

Examples

W tym przykładzie dane są eksportowane zbiorczo z tabeli AdventureWorks2022.HumanResources.Department do pliku danych Department-c-t.txt przy użyciu formatu znaków z przecinkiem jako terminatorem pola i znakiem nowego wiersza (\n) jako terminatorem wiersza.

Polecenie bcp zawiera następujące przełączniki.

Switch Description
-c Określa, że pola danych mają być ładowane jako dane znaków.
-t , Określa przecinek (,) jako terminator pola.
-r \n Określa terminator wierszy jako znak przejścia do nowego wiersza. Jest to domyślny terminator wierszy, dlatego określenie go jest opcjonalne.
-T Określa, że narzędzie bcp łączy się z programem SQL Server poprzez zaufane połączenie z wykorzystaniem zintegrowanych mechanizmów uwierzytelniania. Jeśli -T nie zostanie określony, musisz określić -U i -P, aby pomyślnie się zalogować.

Aby uzyskać więcej informacji, zobacz narzędzie bcp .

W wierszu polecenia systemu Microsoft Windows wprowadź:

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

Spowoduje to utworzenie Department-c-t.txt, który zawiera 16 rekordów z czterema polami. Pola są oddzielone przecinkami.

Określ terminatory dla importu zbiorczego

Podczas zbiorczego importowania danych, takich jak char lub nchar, komenda importu zbiorczego musi rozpoznać terminatory używane w pliku danych. Sposób określenia terminatorów zależy od polecenia importu zbiorczego w następujący sposób:

  • bcp

    Określanie terminatorów dla operacji importowania używa tej samej składni co w przypadku operacji eksportowania. Aby uzyskać więcej informacji, zobacz Określanie terminatorów dla eksportu zbiorczego, we wcześniejszej części tego artykułu.

  • BULK INSERT

    Terminatory można określić dla poszczególnych pól w pliku formatu lub dla całego pliku danych za pomocą kwalifikatorów przedstawionych w poniższej tabeli.

    Qualifier Description
    FIELDTERMINATOR = '<field_terminator>' Określa terminator pola, który ma być używany dla plików danych znakowych i Unicode.

    Wartość domyślna to \t (znak tabulacji).
    ROWTERMINATOR = '<row_terminator>' Określa terminator wiersza, który ma być używany dla plików danych znakowych i Unicode.

    Wartość domyślna to \n (znak nowego wiersza).

    Aby uzyskać więcej informacji, zobacz BULK INSERT.

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

    OPENROWSET W przypadku dostawcy zestawów wierszy zbiorczych terminatory można określić tylko w pliku formatu (który jest wymagany z wyjątkiem typów danych dużych obiektów). Jeśli plik danych znaków używa niedomyślnego terminatora, musi być zdefiniowany w pliku formatu. Aby uzyskać więcej informacji, zobacz Utwórz plik formatu (SQL Server) oraz Użyj pliku formatu do masowego importu danych (SQL Server).

    Aby uzyskać więcej informacji na temat klauzuli OPENROWSET BULK , zobacz OPENROWSET (BULK).

Określ \n jako terminator wierszy dla importu zbiorczego

Jeśli określisz \n jako terminator wiersza dla importu zbiorczego lub niejawnie skorzystasz z domyślnego terminatora wiersza, bcp i instrukcja BULK INSERT oczekują kombinacji CRLF (powrót karetki - nowa linia) jako terminatora wiersza. Jeśli plik źródłowy używa tylko znaku nowej linii (LF) jako terminatora wiersza, co jest typowe w plikach generowanych na komputerach z systemami Unix i Linux, użyj notacji szesnastkowej, aby określić terminator LF. Na przykład w instrukcji BULK INSERT :

ROWTERMINATOR = '0x0A'

Examples

Przykłady w tej sekcji pokazują, jak zbiorczo importować dane znakowe z pliku danych Department-c-t.txt utworzonego w poprzednim przykładzie do tabeli myDepartment w przykładowej bazie danych AdventureWorks2022. Przed uruchomieniem przykładów należy utworzyć tę tabelę. Aby utworzyć tę tabelę w schemacie dbo , w Edytorze zapytań programu SQL Server Management Studio wykonaj następujący kod:

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. Używanie narzędzia bcp do interakcyjnego określania terminatorów

Poniższy przykład zbiorczo importuje plik danych Department-c-t.txt przy użyciu polecenia bcp. To polecenie używa tych samych przełączników poleceń co polecenie eksportu zbiorczego. Aby uzyskać więcej informacji, zobacz Określanie terminatorów dla eksportu zbiorczego, we wcześniejszej części tego artykułu.

W wierszu polecenia systemu Windows wpisz następujące polecenie:

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

B. Używanie funkcji BULK INSERT w celu interakcyjnego określania terminatorów

Poniższy przykład zbiorczo importuje plik danych Department-c-t.txt przy użyciu instrukcji BULK INSERT, która używa kwalifikatorów pokazanych w poniższej tabeli.

Option Attribute
DATAFILETYPE = 'char' Określa, że pola danych mają być ładowane jako dane znaków.
FIELDTERMINATOR = ',' Określa przecinek (,) jako terminator pola.
ROWTERMINATOR = '\n' Określa terminator wierszy jako znak przejścia do nowego wiersza.

W edytorze zapytań programu SQL Server Management Studio wykonaj następujący kod:

USE AdventureWorks2022;
GO

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