Delen via


Veld- en rijeindtekens opgeven (SQL Server)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Voor tekengegevensvelden kunt u met optionele afsluittekens het einde van elk veld in een gegevensbestand markeren met een veldeindteken en het einde van elke rij met een rijeindteken. Eindtekens zijn een manier om aan te geven aan programma's die het gegevensbestand lezen waarin een veld of rij eindigt en een ander veld of een andere rij begint.

Belangrijk

Wanneer u native of Unicode-indeling gebruikt, gebruikt u lengtevoorvoegsels in plaats van veldeindtekens. Systeemeigen indelingsgegevens kunnen conflicteren met terminators omdat een gegevensbestand met een systeemeigen indeling wordt opgeslagen in de interne binaire gegevensindeling van Microsoft SQL Server.

Tekens die worden ondersteund als afsluiters

De bcp instructie, BULK INSERT-instructie en de OPENROWSET-rijsetprovider voor bulkgegevens ondersteunen verschillende tekens als veld- of rijeindtekens en zoeken altijd naar het eerste voorbeeld van elk eindteken. De volgende tabel bevat de ondersteunde tekens voor afsluiters.

Afsluitend teken Aangegeven door
Tabblad \t

Dit is het standaardscheidingsteken voor een veld.
Nieuwlijnteken \n

Dit is het standaard rij-eindteken.
Wagen terugkeer/linovoer \r
Backslash* \|
Null-eindteken (niet-zichtbare afsluiter)** \0
Elk afdrukbaar teken (besturingstekens kunnen niet worden afgedrukt, behalve null, tab, nieuwe regel en regelterugloop) (*, A, t, l, enzovoort)
Tekenreeks van maximaal 10 afdrukbare tekens, inclusief enkele of alle eindtekens die eerder zijn vermeld (**\t**, einde, !!!!!!!!!, \t-\n, enzovoort)

*Alleen de tekens t, n, r, 0 en '\0' werken met het escape-teken backslash om een controlekarakter te produceren.

**Hoewel het null-besturingsteken (\0) niet zichtbaar is wanneer het wordt afgedrukt, is het een uniek teken in het gegevensbestand. Dit betekent dat het gebruik van een null-besturingsteken als veld- of rijeindteken verschilt van het geheel ontbreken van een veld- of rijeindteken.

Belangrijk

Als een afsluitteken in de gegevens voorkomt, wordt het geïnterpreteerd als een afsluiter, niet als gegevens en worden de gegevens na dat teken geïnterpreteerd als behorend tot het volgende veld of de volgende record. Kies daarom zorgvuldig uw eindtekens om ervoor te zorgen dat ze nooit in uw gegevens worden weergegeven. Een veldeindteken met een laag surrogaatveld is bijvoorbeeld geen goede keuze voor een veldeindteken als de gegevens dat lage surrogaat bevatten.

Rijeindtekens gebruiken

Het rijeindteken kan hetzelfde teken zijn als het eindteken voor het laatste veld. Over het algemeen is een apart rijeindteken echter handig. Als u bijvoorbeeld tabellaire uitvoer wilt produceren, beëindigt u het laatste veld in elke rij met het teken newline (\n) en alle andere velden met het tabteken (\t). Als u elke gegevensrecord op een eigen regel in het gegevensbestand wilt plaatsen, geeft u de combinatie \r\n op als het rijeindteken.

Notitie

Wanneer u bcp interactief gebruikt en \n (newline) opgeeft als het rijeindteken, bcp deze automatisch voorafgaat met een \r (regelterugloopteken), wat resulteert in een rijeindteken van \r\n.

Specificeer afsluiters voor bulkexport

Wanneer u teken bulksgewijs exporteert of nchar gegevens en een niet-standaardeindteken wilt gebruiken, moet u de afsluiter opgeven voor de opdracht bcp. U kunt afsluiters op een van de volgende manieren opgeven:

  • Met een indelingsbestand dat de terminator voor elk veld specificeert.

    Notitie

    Zie Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)voor informatie over het gebruik van indelingsbestanden.

  • Zonder een indelingsbestand bestaan de volgende alternatieven:

    • Gebruik de schakelaar -t om het veldeindteken op te geven voor alle velden behalve het laatste veld in de rij en de schakelaar -r om een rijeindteken op te geven.

    • Met een schakeloptie voor tekenopmaak (-c of -w) zonder de schakeloptie -t, waarmee het veldbeëindigingsteken wordt ingesteld op het tabteken \t. Dit is hetzelfde als het opgeven van -t\t.

      Notitie

      Als u de -n (systeemeigen gegevens) of -N (systeemeigen Unicode)-switch opgeeft, worden afsluiters niet ingevoegd.

    • Als een interactieve bcp-opdracht de in of uit optie bevat zonder de bestandsindelingsswitch (-f) of een schakeloptie voor gegevensindeling (-n,, -c, -wof -N), en u hebt ervoor gekozen om geen voorvoegsellengte en veldlengte op te geven, vraagt de opdracht om het veldeindteken van elk veld, waarbij de standaardwaarde niets is.

      Enter field terminator [none]:

      Over het algemeen is de standaardinstelling een geschikte keuze. Zie voor teken of nchar gegevensvelden echter de volgende subsectie, 'Richtlijnen voor het gebruik van afsluiters'. Zie Gegevensindelingen opgeven voor compatibiliteit bij het gebruik van bcp (SQL Server)voor een voorbeeld waarin deze prompt in context wordt weergegeven.

      Notitie

      Nadat u alle velden in een bcp opdracht interactief hebt opgegeven, wordt u gevraagd uw antwoorden op te slaan voor elk veld in een bestand met een niet-XML-indeling. Zie Niet-XML-indelingsbestanden (SQL Server)voor meer informatie over bestanden zonder XML-indeling.

Richtlijnen voor het gebruik van afsluiters

In sommige situaties is een terminator nuttig voor een karakter of nchar gegevensveld. Bijvoorbeeld:

  • Voor een gegevenskolom met een null-waarde in een gegevensbestand die wordt geïmporteerd in een programma dat de lengtegegevens van het voorvoegsel niet begrijpt.

    Elke gegevenskolom die een null-waarde bevat, wordt beschouwd als variabele lengte. Als er geen voorvoegsellengten zijn, is een afsluiter nodig om het einde van een null-veld te identificeren, zodat de gegevens correct worden geïnterpreteerd.

  • Voor een lange kolom met vaste lengte waarvan de ruimte slechts gedeeltelijk wordt gebruikt door veel rijen.

    In deze situatie kan het opgeven van een afsluiter de opslagruimte minimaliseren, zodat het veld kan worden behandeld als een veld met een variabele lengte.

Geef \n op als rij-eindteken voor bulkexport

Wanneer u \n opgeeft als een rijeindteken voor bulkexport of impliciet het standaardrijeindteken gebruikt, voert bcp een combinatie van regelterugloopinvoer (CRLF) uit als het rijeindteken. Als u alleen een regelinvoerteken (LF) wilt uitvoeren als het rijeindteken , zoals gebruikelijk is op Unix- en Linux-computers, gebruikt u hexadecimale notatie om het LF-rijeindteken op te geven. Bijvoorbeeld:

bcp -r '0x0A'

Voorbeelden

In dit voorbeeld worden de gegevens uit de AdventureWorks.HumanResources.Department tabel bulksgewijs geëxporteerd naar het Department-c-t.txt gegevensbestand met tekenindeling, met een komma als veldeindteken en het nieuwe regelteken (\n) als het rijeindteken.

De opdracht bcp bevat de volgende schakelopties.

Schakelaar Beschrijving
-c Hiermee geeft u op dat de gegevensvelden als tekengegevens worden geladen.
- t -, Geeft een komma (,) op als het veldeindteken.
-r \n Hiermee geeft u het rijeindteken op als een nieuw regelteken. Dit is het standaard rij-eindteken, dus het opgeven ervan is optioneel.
-T Hiermee geeft u op dat het hulpprogramma bcp verbinding maakt met SQL Server met een vertrouwde verbinding met behulp van geïntegreerde beveiliging. Als -T- niet is opgegeven, moet u -U- en -P- opgeven om u aan te melden.

Zie bcp Utilityvoor meer informatie.

Voer bij de Opdrachtprompt van Microsoft Windows het volgende in:

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

Hiermee maakt u Department-c-t.txt, die 16 records met elk vier velden bevat. De velden worden gescheiden door een komma.

Afsluiters opgeven voor bulkimport

Wanneer u char of nchar gegevens in bulk importeert, moet de bulkimportopdracht de scheidingstekens herkennen die in het gegevensbestand worden gebruikt. Hoe afsluiters kunnen worden opgegeven, is afhankelijk van de opdracht bulksgewijs importeren:

  • bcp

    Als u afsluiters voor een importbewerking opgeeft, wordt dezelfde syntaxis gebruikt als voor een exportbewerking. Voor meer informatie, zie 'Terminators opgeven voor bulkexport,' eerder in dit onderwerp.

  • BULK INSERT

    Eindtekens kunnen worden opgegeven voor afzonderlijke velden in een indelingsbestand of voor het hele gegevensbestand met behulp van de kwalificaties die worden weergegeven in de volgende tabel.

    Kwalificatie Beschrijving
    FIELDTERMINATOR = 'veldscheider' Hiermee geeft u het scheidingsteken op dat moet worden gebruikt voor teken- en Unicode-tekengegevensbestanden.

    De standaardwaarde is \t (tabteken).
    ROWTERMINATOR ='row_terminator' Geeft het rijeindteken op dat moet worden gebruikt voor tekenbestanden en Unicode-tekenbestanden.

    De standaardwaarde is \n (nieuwlijnteken).

    Zie BULK INSERT (Transact-SQL)voor meer informatie.

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

    Voor de OPENROWSET-bulkrijsetprovider kunnen afsluiters alleen worden opgegeven in het indelingsbestand (dit is vereist, met uitzondering van gegevenstypen voor grote objecten). Als een tekengegevensbestand een niet-standaardeindteken gebruikt, moet het worden gedefinieerd in het indelingsbestand. Zie Een Indelingsbestand Maken (SQL Server) en Een Indelingsbestand Gebruiken om Gegevens Bulk te Importeren (SQL Server)voor meer informatie.

    Zie OPENROWSET (Transact-SQL)voor meer informatie over de OPENROWSET BULK-component.

Geef \n op als rijeindteken voor de bulkimport.

Wanneer u \n opgeeft als een rijeindteken voor bulkimport of impliciet het standaard rijeindteken gebruikt, verwachten bcp en de BULK INSERT-instructie een combinatie van carriage return-line feed (CRLF) als het rijeindteken. Als uw bronbestand alleen een regelinvoerteken (LF) gebruikt als het rijeindteken , zoals gebruikelijk is in bestanden die op Unix- en Linux-computers worden gegenereerd, gebruikt u hexadecimale notatie om het LF-rijeindteken op te geven. Bijvoorbeeld in een BULK INSERT-instructie:

 ROWTERMINATOR = '0x0A'

Voorbeelden

In de voorbeelden in deze sectie worden de karaktergegevens in bulk geïmporteerd vanuit het Department-c-t.txt gegevensbestand, dat in het vorige voorbeeld is gemaakt, naar de myDepartment tabel in de AdventureWorks2022 voorbeelddatabase. Voordat u de voorbeelden kunt uitvoeren, moet u deze tabel maken. Als u deze tabel wilt maken onder het dbo--schema, voert u in sql Server Management Studio Query Editor de volgende code uit:

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

Een. BCP gebruiken om einden interactief op te geven

In het volgende voorbeeld wordt het Department-c-t.txt gegevensbestand bulksgewijs geïmporteerd met behulp van een bcp opdracht. Deze opdracht maakt gebruik van dezelfde opdrachtswitches als de opdracht bulksgewijs exporteren. Voor meer informatie, zie 'Terminators opgeven voor bulkexport', eerder in dit onderwerp.

Voer bij de Windows-opdrachtprompt het volgende in:

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

B. BULK INSERT gebruiken om afscheiders interactief op te geven

In het volgende voorbeeld wordt het Department-c-t.txt gegevensbestand bulksgewijs geïmporteerd met behulp van een BULK INSERT-instructie die gebruikmaakt van de kwalificaties die in de volgende tabel worden weergegeven.

Optie Attribuut
DATAFILETYPE ='character' Hiermee geeft u op dat de gegevensvelden als tekengegevens worden geladen.
FIELDTERMINATOR =',' Hiermee specificeert u een komma (,) als het veldeindteken.
ROWTERMINATOR ='\n' Hiermee geeft u het rijeindteken op als een nieuw regelteken.

Voer in SQL Server Management Studio Query Editor de volgende code uit:

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

Volgende stappen