Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
För teckendatafält kan du med valfria avslutande tecken markera slutet på varje fält i en datafil med ett fältavslutande och slutet av varje rad med en radavgränsare. Avslutande tecken är ett sätt att indikera för program som läser datafilen där ett fält eller en rad slutar och ett annat fält eller en annan rad börjar.
Viktig
När du använder inbyggt eller unicode-nativt format, använd längdprefix i stället för fältavgränsare. Intern ursprungsformatdata kan vara i konflikt med terminatorer eftersom en ursprungsformatdatafil lagras i Microsoft SQL Servers interna binära dataformat.
Tecken som stöds som avslutare
Bcp-kommandot, BULK INSERT
-instruktionen och massraduppsättningsprovidern OPENROWSET
stöder olika tecken som fält- eller radavgränsare och letar alltid efter den första instansen av varje terminator. I följande tabell visas de tecken som stöds för terminaltecken.
Avslutande tecken | Anges av | Beskrivning |
---|---|---|
Flik | \t |
Det här är standardfältavgränsaren. |
Nytt radtecken | \n |
Det här är standardradsavgränsaren. |
Vagnretur/linjematning | \r |
|
Omvänt snedstreck 1 | \ |
|
Nollterminator (osynlig avslutare) 2 | \0 |
|
Alla utskrivbara tecken (kontrolltecken kan inte skrivas ut, förutom null, flik, ny rad och vagnretur) | (* , A , t , l och så vidare) |
|
Sträng med upp till 10 utskrivbara tecken, inklusive några eller alla av de avslutare som angavs tidigare | (**\t** , end , !!!!!!!!!! , \t-\n och så vidare) |
1 Endast t
tecknen , n
, r
, 0
och \0
fungerar med escape-tecknet för omvänt snedstreck för att skapa ett kontrolltecken.
2 Även om null-kontrolltecknet (\0
) inte visas när det skrivs ut är det ett distinkt tecken i datafilen. Det innebär att användningen av null-kontrolltecknet som ett fält eller radavslutare skiljer sig från att inte ha något fält eller radavgränsare alls.
Viktig
Om ett terminator-tecken förekommer inom data tolkas tecknet som en avslutare, inte som data, och data efter terminator-tecknet tolkas som tillhörande nästa fält eller post. Välj därför dina avslutare noggrant för att se till att de aldrig visas i dina data. Till exempel är en låg surrogatfältsavgränsare inte ett bra val för en fältavgränsare om data innehåller den låga surrogaten.
Använd radavgränsare
Radavgränsaren kan vara samma tecken som avgränsaren för det sista fältet. Vanligtvis är dock en tydlig radavslutare användbar. Om du till exempel vill skapa tabellutdata avslutar du det sista fältet på varje rad med det nya radtecknet (\n
) och alla andra fält med tabbtecknet (\t
). Om du vill placera varje datapost på en egen rad i datafilen anger du kombinationen \r\n
som radavgränsare.
Notera
När du använder bcp interaktivt och anger \n
(newline) som radavslutare, prefixerar bcp automatiskt det med ett \r
(vagnretur)-tecken, vilket resulterar i en radavslutare av \r\n
.
Ange avslutare för massexport
När du massexportera tecken eller nchar data och vill använda en icke-standardavgränsare, måste du ange avslutaren till kommandot bcp. Du kan ange avslutare på något av följande sätt:
Med en formatfil som anger avslutaren för varje fält.
Notera
Information om hur du använder formatfiler finns i Formatera filer för att importera eller exportera data (SQL Server).
Utan en formatfil finns följande alternativ:
Använd växeln
-t
för att ange fältavslutaren för alla fält utom det sista fältet på raden och använd växeln-r
för att ange en radavgränsare.Använd en teckenformatsväxel (
-c
eller-w
) utan växeln-t
, som anger fältavgränsaren till fliktecknet .\t
Detta är samma sak som att ange-t\t
.Notera
Om du anger växeln
-n
(interna data) eller-N
(unicode-versioner) infogas inte avslutare.Om ett interaktivt bcp-kommando innehåller
in
alternativet ellerout
utan antingen formatfilsväxeln (-f
) eller en dataformatsväxel (-n
, ,-c
-w
eller-N
), och du väljer att inte ange prefixets längd och fältlängd, frågar kommandot efter fältavslutaren för varje fält, med standardvärdet none:Enter field terminator [none]:
I allmänhet är standardvärdet ett lämpligt val. För tecken- eller nchar-datafält, se dock följande underavsnitt, ”Riktlinjer för att använda terminatorer”. Ett exempel som visar den här prompten i kontext finns i Ange kompatibilitetsdataformat när du använder bcp (SQL Server).
Notera
När du interaktivt har angett alla fält i ett bcp- kommandot uppmanas du att spara dina svar för varje fält i en fil som inte är XML-format. Mer information om filer som inte är XML-format finns i Använda icke-XML-formatfiler (SQL Server).
Riktlinjer för att använda terminatorer
I vissa situationer är en avslutare användbar för ett tecken eller nchar datafält. Till exempel:
För en datakolumn som innehåller ett null-värde i en datafil som ska importeras till ett program som inte förstår prefixets längdinformation.
Alla datakolumner som innehåller ett null-värde anses vara variabellängd. I avsaknad av prefixlängder är en avslutare nödvändig för att identifiera slutet på ett null-fält, så att data tolkas korrekt.
För en kolumn med lång fast längd vars utrymme bara delvis används av många rader.
I det här fallet kan du minimera lagringsutrymmet genom att ange en avslutare så att fältet kan behandlas som ett fält med variabel längd.
Ange \n
som radavgränsare för massexport
När du anger \n
som radavgränsare för massexport, eller implicit använder standardradsavgränsaren, matar bcp ut en kombination av vagnretur och radmatning (CRLF) som radavgränsare. Om du bara vill mata ut ett radmatningstecken (LF) som radavgränsare – vilket är vanligt på Unix- och Linux-datorer – använder du hexadecimal notation för att ange LF-radavslutaren. Till exempel:
bcp -r '0x0A'
Exempel
I det här exemplet exporteras data från tabellen AdventureWorks2022.HumanResources.Department
till Department-c-t.txt
-datafilen med hjälp av teckenformat, med kommatecken som fältavgränsare och det nya radtecknet (\n) som radavgränsare.
Kommandot bcp innehåller följande växlar.
Strömbrytare | Beskrivning |
---|---|
-c |
Anger att datafälten läses in som teckendata. |
-t , |
Anger ett kommatecken (,) som fältavgränsare. |
-r \n |
Anger radavgränsaren som ett nytt radtecken. Det här är standardradsavgränsaren, så om du anger det är det valfritt. |
-T |
Anger att verktyget bcp ansluter till SQL Server med en betrodd anslutning med integrerad säkerhet. Om -T inte har angetts måste du ange -U och -P för att logga in. |
För mer information, se bcp-verktyg.
Ange följande kommando i Microsoft Windows-kommandotolken:
bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T
Detta skapar Department-c-t.txt
som innehåller 16 poster med fyra fält vardera. Fälten avgränsas med ett kommatecken.
Ange avslutare för massimport
När du massimporterar tecken eller nchar data måste kommandot massimport känna igen de terminerare som används i datafilen. Hur avgränsare kan anges beror på kommandot för massimport enligt följande:
Bcp
Om du anger avslut för en importåtgärd används samma syntax som för en exportåtgärd. Mer information finns i Ange avslutare för massexport tidigare i den här artikeln.
BULK INSERT
Terminators kan anges för enskilda fält i en formatfil eller för hela datafilen med hjälp av de kvalificerare som visas i följande tabell.
Kvalifikator Beskrivning FIELDTERMINATOR = '<field_terminator>'
Anger den fältavgränsare som ska användas för datafiler för tecken och Unicode-tecken.
Standardvärdet är\t
(tabbtecken).ROWTERMINATOR = '<row_terminator>'
Anger radavgränsaren som ska användas för datafiler för tecken och Unicode-tecken.
Standardvärdet är\n
(nytt radtecken).Mer information finns i BULK INSERT.
INSERT ... SELECT * FROM OPENROWSET(BULK...)
För massradsuppsättningsprovidern
OPENROWSET
kan avgränsare endast anges i formatfilen (vilket krävs om inte för datatyper med stora objekt). Om en teckendatafil använder en icke-standardavgränsare måste den definieras i formatfilen. Mer information finns i Skapa en formatfil (SQL Server) och Använda en formatfil för att massimportera data (SQL Server).För mer information om
OPENROWSET BULK
satsen, se OPENROWSET (BULK).
Ange \n
som radavgränsare för massimport
När du anger \n
som radavgränsare för massimport, eller implicit använder standardradavgränsaren, förväntar sig bcp och instruktionen BULK INSERT
en kombination av vagnretur-radmatning (CRLF) som radavgränsare. Om källfilen endast använder ett radmatningstecken (LF) som radavgränsare, vilket är vanligt i filer som genereras på Unix- och Linux-datorer, använder du hexadecimal notation för att ange LF-radavslutaren. Till exempel i en BULK INSERT
instruktion:
ROWTERMINATOR = '0x0A'
Exempel
Exemplen i det här avsnittet massimporterar teckendata från datafilen Department-c-t.txt
som skapades i föregående exempel till tabell myDepartment
i exempeldatabasen AdventureWorks2022
. Innan du kan köra exemplen måste du skapa den här tabellen. Om du vill skapa den dbo
här tabellen under schemat kör du följande kod i SQL Server Management Studio Query Editor:
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. Använd bcp för att interaktivt ange avslutare
I exempel nedan importeras Department-c-t.txt
-datafilen med hjälp av bcp
-kommando. Det här kommandot använder samma kommandoväxlar som massexportkommandot. Mer information finns i Ange avslutare för massexport tidigare i den här artikeln.
I Windows-kommandotolken skriver du följande kommando:
bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T
B. Använd BULK INSERT för att interaktivt ange avgränsare
Följande exempel importerar Department-c-t.txt
-datafilen med hjälp av en BULK INSERT
-instruktion som använder de kvalifikationer som visas i följande tabell.
Alternativ | Attribut |
---|---|
DATAFILETYPE = 'char' |
Anger att datafälten läses in som teckendata. |
FIELDTERMINATOR = ',' |
Anger ett kommatecken (, ) som fältavgränsare. |
ROWTERMINATOR = '\n' |
Anger radavgränsaren som ett nytt radtecken. |
Kör följande kod i SQL Server Management Studio Query Editor:
USE AdventureWorks2022;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO