Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
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.
Important
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 als beëindigingsteken worden ondersteund
Het commando, BULK INSERT
instructie en de OPENROWSET
bulkrijsetprovider ondersteunen verschillende tekens als veld- of rijscheidingstekens en zoeken altijd naar het eerste exemplaar van elke scheidingsteken. De volgende tabel bevat de ondersteunde tekens voor afsluiters.
Terminating character | Indicated by | Description |
---|---|---|
Tab | \t |
Dit is het standaardscheidingsteken voor een veld. |
Newline character | \n |
Dit is het standaard rij-eindteken. |
Wagen terugkeer/linovoer | \r |
|
Backslash 1 | \ |
|
Null-eindteken (niet-zichtbare afsluiter) 2 | \0 |
|
Elk afdrukbaar teken (besturingstekens zijn niet afdrukbaar, behalve het null-teken, 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** , end , !!!!!!!!!! , \t-\n enzovoort) |
1 Alleen de t
, n
, r
, 0
en \0
tekens werken met het escape-teken backslash om een controlekarakter te produceren.
2 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.
Important
Als een afsluitteken in de gegevens voorkomt, wordt het teken 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 laag surrogaatteken is bijvoorbeeld geen goede keuze voor een veldeindteken als de gegevens dat lage surrogaatteken 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 nieuwe regelteken (\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.
Note
Wanneer u bcp interactief gebruikt en \n
(newline) opgeeft als het rijeindteken, plaatst bcp er automatisch een \r
(carriage return) voor, wat resulteert in een rijeindteken van \r\n
.
Afsluittekens opgeven 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.
Note
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
-t
schakeloptie om het veldeindteken op te geven voor alle velden, met uitzondering van het laatste veld in de rij, en gebruik de-r
schakeloptie om een rijeindteken op te geven.Gebruik een schakeloptie voor tekenopmaak (
-c
of-w
) zonder de-t
schakeloptie, waarmee het veldeindteken wordt ingesteld op het tabteken.\t
Dit is hetzelfde als-t\t
opgeven.Note
Als u de
-n
(systeemeigen gegevens) of-N
(systeemeigen Unicode)-switch opgeeft, worden afsluiters niet ingevoegd.Als een interactieve bcp-opdracht de
in
ofout
optie bevat zonder de bestandsswitch (-f
) of een schakeloptie voor gegevensindeling (-n
,-c
,-w
of-N
) en u ervoor kiest om geen voorvoegsellengte en veldlengte op te geven, vraagt de opdracht om het veldeindteken van elk veld op te geven, met een standaardwaarde van geen:Enter field terminator [none]:
Over het algemeen is de standaardinstelling een geschikte keuze. Zie echter voor char- of nchar-gegevensvelden de volgende subsectie, 'Richtlijnen voor het gebruik van eindtekens'. Voor een voorbeeld dat deze prompt in context toont, zie Compatibiliteitsgegevensindelingen opgeven bij het gebruik van bcp (SQL Server).
Note
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) gebruiken voor meer informatie over bestanden zonder XML-indeling.
Richtlijnen voor het gebruik van eindtekens
In sommige situaties is een terminator nuttig voor een karakter of nchar gegevensveld. For example:
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 rijeindteken 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. For example:
bcp -r '0x0A'
Examples
In dit voorbeeld worden de gegevens uit de AdventureWorks2022.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.
Switch | Description |
---|---|
-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 specificatie 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 aan te melden. |
Zie bcp Utilityvoor meer informatie.
Voer bij de Opdrachtprompt van Microsoft Windows het volgende in:
bcp AdventureWorks2022.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.
Scheidingstekens 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 Eindtekens opgeven voor bulkexport, eerder in dit artikel.
BULK INSERT
Eindtekens kunnen worden opgegeven voor afzonderlijke velden in een opmaakbestand of voor het hele gegevensbestand, met behulp van de kwalificatoren die worden weergegeven in de volgende tabel.
Qualifier Description FIELDTERMINATOR = '<field_terminator>'
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 voor meer informatie.
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Voor de
OPENROWSET
provider voor bulkrijsets 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.Raadpleeg
OPENROWSET BULK
voor meer informatie over de clausule.
Specificeer \n
als een rijeindteken voor bulkimport
Wanneer u \n
als een rijeindteken opgeeft voor bulkimport of impliciet het standaard rijeindteken gebruikt, verwachten bcp en de BULK INSERT
-instructie een carriage return-line feed-combinatie (CRLF) als het rijeindteken. Als uw bronbestand alleen een regelinvoerteken (LF) als het rijeindteken gebruikt, zoals gebruikelijk is in bestanden die worden gegenereerd op Unix- en Linux-computers, gebruikt u hexadecimale notatie om het LF-rijeindteken op te geven. Bijvoorbeeld in een BULK INSERT
instructie:
ROWTERMINATOR = '0x0A'
Examples
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 CONSTRAINT
DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO
A. 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 Eindtekens opgeven voor bulkexport, eerder in dit artikel.
Typ bij de Windows-opdrachtprompt de volgende opdracht:
bcp AdventureWorks2022.dbo.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.
Option | Attribute |
---|---|
DATAFILETYPE = 'char' |
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