Freigeben über


Angeben von Feld- und Zeilenendzeichen (SQL Server)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Für Zeichendatenfelder geben Ihnen optionale Abschlusszeichen die Möglichkeit, das Ende jedes Felds in einer Datendatei mit einem Feldabschlusszeichen und das Ende jeder Zeile mit einem Zeilenabschlusszeichenzu markieren. Abschlusszeichen stellen eine Möglichkeit dar, für Datendatei lesende Programmen anzugeben, wo ein Feld oder eine Zeile endet und ein anderes Feld oder eine andere Zeile beginnt.

Wichtig

Verwenden Sie beim systemeigenen Format oder systemeigenen Unicode-Format Längenpräfixe anstelle der Feldabschlusszeichen. Bei Daten im nativen Format kann es zu Konflikten mit Abschlusszeichen kommen, weil Datendateien im nativen Format im internen Binärdatenformat von Microsoft SQL Server gespeichert werden.

Als Endzeichen unterstützte Zeichen

Der bcp-Befehl , BULK INSERT die Anweisung und der OPENROWSET Massen-Rowset-Anbieter unterstützen verschiedene Zeichen als Feld- oder Zeilenterminatoren und suchen immer nach der ersten Instanz jedes Terminators. In der folgenden Tabelle sind die als Abschlusszeichen unterstützten Zeichen aufgeführt.

Abschlusszeichen Kennzeichen Beschreibung
Registerkarte \t Dies ist das Standardfeldabschlusszeichen.
Neue-Zeile-Zeichen \n Dies ist das Standardzeilenabschlusszeichen.
Wagenrücklauf/Zeilenvorschub \r
Umgekehrter Schrägstrich 1 \
Null-Terminator (nichtvisibler Terminator) 2 \0
Jedes druckbare Zeichen (Steuerzeichen sind nicht druckbar, außer NULL, Tabstopp, Zeilenumbruch und Wagenrücklauf) (*, A, t, lusw.)
Eine Zeichenfolge von bis zu 10 Zeichen, die gedruckt werden können, einschließlich einiger oder aller oben aufgeführten Abschlusszeichen (**\t**, end, !!!!!!!!!!, \t-\nusw.)

1 Nur die tZeichen , n, , 0rund \0 Zeichen arbeiten mit dem umgekehrten Schrägstrich-Escapezeichen, um ein Steuerelementzeichen zu erzeugen.

2 Obwohl das Null-Steuerelementzeichen (\0) beim Drucken nicht sichtbar ist, ist es ein anderes Zeichen in der Datendatei. Dies bedeutet, dass das Verwenden des Null-Steuerzeichens als Feld- oder Zeilenabschlusszeichen einen Unterschied dazu darstellt, überhaupt kein Feld- oder Zeilenabschlusszeichen zu verwenden.

Wichtig

Wenn ein Terminatorzeichen innerhalb der Daten auftritt, wird das Zeichen als Terminator interpretiert, nicht als Daten, und die Daten nach diesem Zeichen werden als Zugehörigkeit zum nächsten Feld oder Datensatz interpretiert. Wählen Sie deshalb die Abschlusszeichen mit Bedacht aus, um sicherzustellen, dass sie nicht anderweitig in Ihren Daten vorkommen. Beispielsweise ist ein niedriger Ersatzfeld-Terminator keine gute Wahl für einen Feldterminator, wenn die Daten diesen niedrigen Ersatz enthalten.

Verwenden von Zeilenterminatoren

Beim Zeilenabschlusszeichen kann es sich um das gleiche Zeichen wie dem Abschlusszeichen für das letzte Feld handeln. Im Allgemeinen ist allerdings ein eigenständiges Zeilenabschlusszeichen nützlich. Um beispielsweise eine tabellarische Ausgabe zu erzeugen, beenden Sie das letzte Feld in jeder Zeile mit dem Zeilenumbruchzeichen (\n) und allen anderen Feldern mit dem Tabstoppzeichen (\t). Um jeden Datensatz in einer eigenen Zeile in der Datendatei zu platzieren, geben Sie die Kombination \r\n als Zeilenbeschriftung an.

Hinweis

Wenn Sie bcp interaktiv verwenden und (Neue Zeile) als Zeilenendpunkt angeben \n , stellt bcp es automatisch einem \r (Wagenrücklaufzeichen) voran, was zu einem Zeilenendpunkt von \r\n.

Angeben von Terminatoren für den Massenexport

Wenn Sie beim Massenexport von char oder nchar -Daten ein nicht-standardmäßiges Abschlusszeichen verwenden möchten, müssen Sie das Abschlusszeichen für den Befehl bcp angeben. Zum Angeben der Abschlusszeichen stehen die folgenden Möglichkeiten zur Verfügung:

  • Mit einer Formatdatei, in der das Abschlusszeichen Feld für Feld angegeben wird.

    Hinweis

    Informationen zur Verwendung von Formatdateien finden Sie unter "Formatdateien zum Importieren oder Exportieren von Daten (SQL Server)".

  • Ohne Formatdatei gibt es die folgenden Alternativen:

    • Verwenden Sie den -t Schalter, um den Feldterminator für alle Felder mit Ausnahme des letzten Felds in der Zeile anzugeben und den -r Schalter zum Angeben eines Zeilenterminators zu verwenden.

    • Verwenden Sie einen Zeichenformatschalter (-c oder -w) ohne den -t Schalter, der den Feldterminator auf das Tabstoppzeichen \tfestlegt. Dies entspricht der Angabe -t\tvon .

      Hinweis

      Wenn Sie den -n Schalter (systemeigene Daten) oder -N (unicode native) angeben, werden Die Terminatoren nicht eingefügt.

    • Wenn ein interaktiver bcp-Befehl die in Oder-Option out ohne den Formatdateischalter (-f) oder einen Datenformatschalter (-n, -c, -woder -N) enthält und Sie sich entscheiden, keine Präfixlänge und Feldlänge anzugeben, werden die Eingabeaufforderungen für den Feldterminator jedes Felds mit einem Standardwert von keinem angezeigt:

      Enter field terminator [none]:

      Im Allgemeinen ist der Standard angemessen. Informationen zu Char - oder nchar-Datenfeldern finden Sie jedoch im folgenden Unterabschnitt "Richtlinien für die Verwendung von Terminatoren". Ein Beispiel, das diese Eingabeaufforderung im Kontext zeigt, finden Sie unter Angeben von Kompatibilitätsdatenformaten bei Verwendung von bcp (SQL Server).

      Hinweis

      Nachdem Sie interaktiv alle Felder in einem bcp-Befehl angegeben haben, werden Sie vom Befehl dazu aufgefordert, Ihre Antworten für die einzelnen Felder in einer Nicht-XML-Formatdatei zu speichern. Weitere Informationen zu Nicht-XML-Formatdateien finden Sie unter Verwenden von Nicht-XML-Formatdateien (SQL Server).

Richtlinien für die Verwendung von Terminatoren

In einigen Fällen ist ein Abschlusszeichen für char - oder nchar -Datenfelder nützlich. Zum Beispiel:

  • Für eine Datenspalte, die einen Nullwert in einer Datendatei enthält, die in ein Programm importiert wird, das die Präfixlängeninformationen nicht versteht.

    Jede Datenspalte, die einen NULL-Wert enthält, gilt als Spalte variable Länge. Wenn keine Präfixlängen vorhanden sind, wird ein Abschlusszeichen benötigt, um das Ende eines NULL-Felds zu identifizieren und sicherzustellen, dass die Daten ordnungsgemäß interpretiert werden.

  • Für eine lange Spalte mit fester Länge, deren Breite von vielen Zeilen nicht vollständig genutzt wird.

    In dieser Situation kann das Angeben eines Abschlusszeichens den Speicherplatz minimieren, sodass das Feld als Feld variabler Länge behandelt werden kann.

Als Zeilenendpunkt für den Massenexport angeben \n

Wenn Sie \n als Zeilenabschlusszeichen für den Massenexport angeben oder implizit das standardmäßige Zeilenabschlusszeichen verwenden, gibt „bcp“ als Zeilenabschlusszeichen CRLF (Carriage Return-Line Feed Combination) aus. Wenn Sie nur ein LF-Zeichen (Line Feed) als Zeilenabschlusszeichen ausgeben möchten – dies ist auf Unix- und Linux-Computern typisch –, verwenden Sie Hexadezimalnotation zur Angabe des LF-Zeilenabschlusszeichens. Zum Beispiel:

bcp -r '0x0A'

Beispiele

In diesem Beispiel wird ein Massenexport von Daten aus der AdventureWorks2022.HumanResources.Department -Tabelle in die Department-c-t.txt -Datendatei mithilfe des Zeichenformats ausgeführt, wobei ein Komma als Feldabschlusszeichen und das Neue-Zeile-Zeichen (\n) als Zeilenabschlusszeichen dient.

Der Befehl bcp verfügt über folgende Schalter.

Schalter Beschreibung
-c Gibt an, dass die Datenfelder als Zeichendaten geladen werden.
-t , Gibt ein Komma (,) als Feldabschlusszeichen an.
-r \n Gibt das Zeilenabschlusszeichen als Neue-Zeile-Zeichen an. Dies ist der Standard-Zeilenendpunkt, sodass es optional ist.
-T Gibt an, dass das Hilfsprogramm bcp die Verbindung mit SQL Server mithilfe integrierter Sicherheit über eine vertrauenswürdige Verbindung herstellt. Wenn -T nicht angegeben, müssen Sie angeben -U und -P erfolgreich anmelden.

Weitere Informationen finden Sie unter bcp Utility.

Geben Sie an der Microsoft Windows-Eingabeaufforderung Folgendes ein:

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

Dadurch wird Department-c-t.txtmit 16 Datensätzen zu jeweils vier Feldern erstellt. Die Felder werden durch ein Komma getrennt.

Angeben von Terminatoren für den Massenimport

Wenn Sie einen Massenimport von char - oder nchar -Daten ausführen, müssen vom Massenimportbefehl die in der Datendatei verwendeten Abschlusszeichen erkannt werden können. Wie Abschlusszeichen angegeben werden können, hängt vom Massenimportbefehl ab:

  • bcp

    Für die Angabe von Abschlusszeichen wird bei Massenimport- und -exportvorgängen dieselbe Syntax verwendet. Weitere Informationen finden Sie unter Angeben von Terminatoren für den Massenexport weiter oben in diesem Artikel.

  • BULK INSERT

    Terminatoren können für einzelne Felder in einer Formatdatei oder für die gesamte Datendatei mithilfe der in der folgenden Tabelle gezeigten Qualifizierer angegeben werden.

    Qualifizierer Beschreibung
    FIELDTERMINATOR = '<field_terminator>' Gibt das Feldabschlusszeichen an, das für Zeichen- und Unicodezeichen-Datendateien verwendet werden soll.

    Der Standardwert ist \t (Tabstoppzeichen).
    ROWTERMINATOR = '<row_terminator>' Gibt das Zeilenabschlusszeichen an, das für Zeichen- und Unicodezeichen-Datendateien verwendet werden soll.

    Der Standardwert ist \n (Zeilenumbruchzeichen).

    Weitere Informationen finden Sie unter BULK INSERT.

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

    Für den OPENROWSET Massen-Rowset-Anbieter können Terminatoren nur in der Formatdatei angegeben werden (die mit Ausnahme von Datentypen für große Objekte erforderlich ist). Wenn von einer Zeichendatendatei ein nicht-standardmäßiges Abschlusszeichen verwendet wird, muss dieses in der Formatdatei definiert werden. Weitere Informationen finden Sie unter Erstellen einer Formatdatei (SQL Server) und Massenimport von Daten mithilfe einer Formatdatei (SQL Server).

    Weitere Informationen zur Klausel finden Sie unter OPENROWSET (BULK).For more information about the OPENROWSET BULK clause, see OPENROWSET (BULK).

Als Zeilenendpunkt für den Massenimport angeben \n

Wenn Sie als Zeilenendpunktator für den Massenimport angeben \n oder implizit den Standard-Zeilenendpunktator verwenden, erwarten bcp und die BULK INSERT Anweisung eine Wagenrücklauf-Zeilenvorschubkombination (CRLF) als Zeilenendpunktator. Wenn Ihre Quelldatei nur ein Zeilenvorschubzeichen (Line Feed Character, LF) als Zeilenendpunkt verwendet, wie in Dateien, die auf Unix- und Linux-Computern generiert werden, verwenden Sie hexadezimale Schreibweise, um den LF-Zeilenendpunkt anzugeben. Beispiel:BULK INSERT

ROWTERMINATOR = '0x0A'

Beispiele

In den Beispielen in diesem Abschnitt wird jeweils ein Massenimport von Zeichendaten aus der Department-c-t.txt -Datendatei, die im vorhergehenden Beispiel erstellt wurde, in die myDepartment -Tabelle in der AdventureWorks2022 -Beispieldatenbank ausgeführt. Vor dem Ausführen dieser Beispiele müssen Sie diese Tabelle erstellen. Führen Sie zum Erstellen dieser Tabelle unter dem dbo Schema im SQL Server Management Studio-Abfrage-Editor den folgenden Code aus:

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

Ein. Verwenden von bcp zum interaktiven Angeben von Abschlusszeichen

Im folgenden Beispiel wird ein Massenimport der Department-c-t.txt -Datendatei mithilfe eines bcp -Befehls ausgeführt. Die mit diesem Befehl verwendeten Schalter sind mit den für den Massenexport gültigen identisch. Weitere Informationen finden Sie unter Angeben von Terminatoren für den Massenexport weiter oben in diesem Artikel.

Geben Sie an der Windows-Eingabeaufforderung den folgenden Befehl ein:

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

B. Verwenden von BULK INSERT zum interaktiven Angeben von Abschlusszeichen

Im folgenden Beispiel wird ein Massenimport der Department-c-t.txt -Datendatei mithilfe einer BULK INSERT -Anweisung ausgeführt, die die in der folgenden Tabelle aufgeführten Qualifizierer verwendet.

Auswahlmöglichkeit Attribut
DATAFILETYPE = 'char' Gibt an, dass die Datenfelder als Zeichendaten geladen werden.
FIELDTERMINATOR = ',' Gibt ein Komma (,) als Feldabschlusszeichen an.
ROWTERMINATOR = '\n' Gibt das Zeilenabschlusszeichen als Neue-Zeile-Zeichen an.

Führen Sie im SQL Server Management Studio-Abfrage-Editor den folgenden Code aus:

USE AdventureWorks2022;
GO

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