Dela via


Ange fält- och radavgränsare (SQL Server)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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

Kommandot bcp, BULK INSERT-instruktionen och OPENROWSET-massraduppsättningsprovidern stöder en mängd olika tecken som fält- eller radavgränsare och söker alltid efter den första instansen av varje avslutare. I följande tabell visas de tecken som stöds för terminaltecken.

Avslutande tecken Anges av
Flik \t

Det här är standardfältavgränsaren.
Nytt radtecken \n

Det här är standardradsavgränsaren.
Vagnretur/linjematning \r
Omvänt snedstreck \|
Nulltecken (icke-synlig tecken) \0
Alla utskrivbara tecken (kontrolltecken är inte utskrivbara, utom nolltecken, tabb, 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)

*Endast tecknen '\t', '\n', '\r', '0' och '\0' fungerar med escape-tecknet för omvänt snedstreck för att skapa ett kontrolltecken.

**Ä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 avslutartecken förekommer i datan tolkas det som en avslutare, inte som data, och data efter det tecknet tolkas som tillhörande följande 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 skulle en låg surrogatfältsavgränsare inte vara ett bra val för en fältavgränsare om data innehåller den låga surrogaten.

Använda 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 (ny rad) som radavgränsare bcp automatiskt prefixerar den med ett \r (vagnretur) som resulterar i en radavslutning av \r\n.

Ange avslutningstecken 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.

    Obs

    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ältavgränsaren för alla fält utom det sista fältet på raden och med hjälp av -r växla för att ange en radavgränsare.

    • Använd en växel i teckenformat (-c eller -w) utan växeln -t, som anger fältavgränsaren till fliktecknet \t. Det här är samma sak som att ange -t\t.

      Note

      Om du anger växeln -n (native data) eller -N (Unicode native) infogas inte slutmarkeringar.

    • Om ett interaktivt bcp-kommando innehåller in eller ut-alternativet utan antingen formatfilsväxeln (-f) eller en dataformatsväxel (-n, -c, -w, eller -N), och du har valt att inte ange prefixets längd och fältlängd, frågar kommandot efter fältavslutaren för varje fält, med ett standardvärde av ingen.

      Enter field terminator [none]:

      I allmänhet är standardvärdet ett lämpligt val. Emellertid, för tecken eller nchar datafält, se följande underavsnitt, "Riktlinjer för att använda avslutare." Ett exempel som visar denna prompt i sitt sammanhang finns i Ange dataformat för kompatibilitet när du använder bcp (SQL Server).

      Anteckning

      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 SQL Server(Non-XML Format Files).

Riktlinjer för att använda Terminators

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 AdventureWorks.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å det är valfritt att ange den.
-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 kunna logga in.

För mer information, se bcp-verktyg.

Ange följande kommando i Microsoft Windows-kommandotolken:

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

Detta skapar Department-c-t.txtsom innehåller 16 poster med fyra fält vardera. Fälten avgränsas med ett kommatecken.

Ange terminators 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 "Specifikation av terminatorer för massexport" tidigare i det här avsnittet.

  • MASSINFÖRING

    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 (Transact-SQL).

  • INFOGA... VÄLJ * FRÅN OPENROWSET(BULK...)

    För bulk-raduppsättningsleverantören OPENROWSET kan avgränsare endast anges i formatfilen (som krävs förutom för datatyper för 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).

    Mer information om OPENROWSET BULK-satsen finns i OPENROWSET (Transact-SQL).

Ange \n som radavgränsare för massimport

När du anger \n som radavslutare för massimport, eller implicit använder standardradavslutaren, förväntar sig bcp och BULK INSERT-instruktionen en kombination av radbrytning och vagnretur (CRLF) som radavslutare. 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 här tabellen under dbo-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 not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
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 "Specificera terminatorer för massexport" tidigare i ämnet.

I Windows-kommandotolken ska du ange:

bcp AdventureWorks2022..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

Nästa steg