Megosztás a következőn keresztül:


Mező- és sorelválasztók megadása (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics platformrendszer (PDW)SQL-elemzési végpont a Microsoft FabricA Microsoft Fabric Warehouse-ban

Karakteradatmezők esetén az opcionális lezáró karakterek lehetővé teszik, hogy az adatfájl egyes mezői végét mezővégző, az egyes sorok végét pedig sorvégző jelezze. A megszakító karakterek egyik módja annak jelzésére, hogy az adatfájlt olvasó programok hol végződnek egy mező vagy sor, és hol kezdődik egy másik mező vagy sor.

Important

Ha natív vagy Unicode natív formátumot használ, használjon hosszelőtagokat a mezőkifejezések helyett. A natív formátumú adatok ütközhetnek a terminátorokkal, mert egy natív formátumú adatfájl a Microsoft SQL Server belső bináris adatformátumában van tárolva.

Karakterek, amelyek terminátorként támogatottak

A bcp parancs, BULK INSERT utasítás és a tömeges sorhalmaz-szolgáltató támogatja a mező- vagy sorhatároló különböző karaktereit, és mindig az egyes határolók első előfordulását keresi. Az alábbi táblázat a terminátorok támogatott karaktereit sorolja fel.

Karakter megszakítása Megjelölte: Description
Tab \t Ez az alapértelmezett mezőelválasztó.
Újvonalas karakter \n Ez az alapértelmezett sorzáró karakter.
Kocsivissza-/vonalcsatorna \r
Fordított perjel 1 \
Null terminátor (nem látható terminátor) 2 \0
Bármely nyomtatható karakter (a vezérlőkarakterek nem nyomtathatók, kivéve a null értéket, a tabulátort, az új vonalat és a kocsivisszajelet) (*, A, t, l, stb.)
Legfeljebb 10 nyomtatható karakterből álló karakterlánc, beleértve a korábban felsorolt terminátorok egy részét vagy mindegyikét. (**\t**, end, !!!!!!!!!!, \t-\n, stb.)

1 Csak a t, n, r, 0 és \0 karakterek működnek a fordított perjel feloldó karakterrel, vezérlőkarakter létrehozásához.

2 Annak ellenére, hogy a null vezérlő karakter (\0) nyomtatáskor nem látható, az adatfájl egy különálló karaktere. Ez azt jelenti, hogy a null vezérlőelem karakter mező vagy sor terminátorként való használata eltér attól, hogy egyáltalán nincs mező vagy sor terminátora.

Important

Ha egy terminátor karakter az adatokban fordul elő, a karaktert nem adatként, hanem terminátorként értelmezi a rendszer, a karaktert követő adatokat pedig a következő mezőhöz vagy rekordhoz tartozóként értelmezi. Ezért gondosan válassza ki a határolókat, hogy biztosan soha ne jelenjenek meg az adatokban. Például egy kis helyettesítő mezőelválasztó nem jó választás mezőelválasztónak, ha az adatok tartalmaznak ilyen kis helyettesítőt.

Sorvégződések használata

A sor terminátora lehet ugyanaz a karakter, mint az utolsó mező terminátora. Általában azonban hasznos egy különálló sor-terminátor. Táblázatos kimenet létrehozásához például zárja le az egyes sorok utolsó mezőjét az új sor karakterrel (\n), és az összes többi mezőt a tabulátor karakterrel (\t). Ha minden adatrekordot a saját sorára szeretne helyezni az adatfájlban, adja meg a kombinációt \r\n a sor terminátoraként.

Note

Ha interaktívan használja a bcp-t , és a sor terminátoraként adja meg \n a (newline) értéket, a bcp automatikusan előtagot ad neki egy \r (kocsivissza) karakterrel, ami a következő sor terminátorát \r\neredményezi: .

Lezáró karakterek megadása tömeges exportáláshoz

Ha tömegesen karakter vagy nchar adatokat exportál, és nem alapértelmezett terminátort szeretne használni, meg kell adnia a terminátort a bcp parancsnak. A terminátorokat az alábbi módokon adhatja meg:

  • Olyan formátumfájllal, amely mezőnként adja meg a terminátort.

    Note

    A formátumfájlok használatáról további információt az adatok importálására vagy exportálására szolgáló fájlok formázása (SQL Server) című témakörben talál.

  • Formátumfájl nélkül a következő alternatívák léteznek:

    • -t A kapcsolóval a sor utolsó mezőjének kivételével az összes mezőhöz megadhatja a mező terminátorát, és a -r kapcsolóval megadhatja a sor terminátorát.

    • Használjon karakterformátumú kapcsolót (-c vagy -w) a -t kapcsoló nélkül, amely a mező terminátorát tabulátor karakterre állítja. \t Ez megegyezik a beállítással -t\t.

      Note

      Ha megadja a -n (natív adatok) vagy a -N (Unicode natív) kapcsolót, a program nem szúr be terminátorokat.

    • Ha egy interaktív bcp-parancs a in vagy out beállítást tartalmazza a formátumfájl kapcsoló (-f) vagy adatformátum kapcsoló (-n, -c, -w vagy -N) nélkül, és úgy dönt, hogy nem adja meg az előtag és a mező hosszát, a parancs az egyes mezők mezőelválasztóját kéri, alapértelmezés szerint nincs.

      Enter field terminator [none]:

      Általában az alapértelmezett beállítás megfelelő választás. Azonban a char- vagy nchar-adatmezők esetében tekintse meg a következő alszakaszt: "Irányelvek a terminátorok használatához." Példát arra, hogy ez a prompt hogyan jelenik meg a környezetben, lásd: Kompatibilitási adatformátumok megadása a bcp (SQL Server) használatakor.

      Note

      Miután interaktív módon meghatározta a bcp parancs összes mezőjét, a parancs felkéri Önt, hogy mentse el minden válaszát egy nem XML formátumú fájlba. A nem XML formátumú fájlokról további információt a Nem XML formátumú fájlok használata (SQL Server) című témakörben talál.

A terminátorok használatának irányelvei

Bizonyos helyzetekben egy terminátor hasznos lehet egy char vagy nchar adatmezőhöz. Például:

  • Olyan adatoszlop esetén, amely null értéket tartalmaz egy olyan adatfájlban, amely olyan programba lesz importálva, amely nem érti az előtag hosszadatait.

    A null értéket tartalmazó adatoszlopok változóhossznak minősülnek. Előtaghosszok hiányában a null mező végének azonosításához terminátorra van szükség, ügyelve arra, hogy az adatok megfelelően legyenek értelmezve.

  • Hosszú rögzített hosszúságú oszlop esetén, amelynek a területét csak részben használja több sor.

    Ebben az esetben a terminátor megadása minimalizálhatja a tárterületet, így a mező változó hosszúságú mezőként kezelhető.

Adja meg \n sor terminátorként a tömeges exportáláshoz

Ha a \n-t sorkimeneti terminátorként adja meg a tömeges exportáláshoz, vagy implicit módon használja az alapértelmezett sor-terminátort, a bcp kocsivissza-sorvége (CRLF) kombinációt ad ki a sor terminátoraként. Ha csak sorbetöltési karaktert (LF) szeretne kiírni a sor terminátoraként – a Unix és Linux rendszerű számítógépeken megszokott módon –, használja a hexadecimális jelölést az LF sor terminátorának megadásához. Például:

bcp -r '0x0A'

Examples

Ez a példa a AdventureWorks2022.HumanResources.Department táblából az adatokat karakterformátumban tömegesen exportálja az Department-c-t.txt adatfájlba, ahol mezőelválasztó a vessző, és sorkífejező a sorvége jel (\n).

A bcp parancs a következő kapcsolókat tartalmazza.

Switch Description
-c Megadja, hogy az adatmezők karakteradatokként legyenek betöltve.
-t , Vesszőt (,) ad meg mező terminátorként.
-r \n Újsoros karakterként adja meg a sor terminátorát. Ez az alapértelmezett sorvége jel, ezért megadása nem kötelező.
-T Megadja, hogy a bcp segédprogram megbízható kapcsolattal csatlakozik az SQL Serverhez integrált biztonság használatával. Ha -T nincs megadva, meg kell adnia -U és -P ahhoz, hogy sikeresen bejelentkezhessen.

További információ: bcp Segédprogram.

A Microsoft Windows parancssorában adja meg a következőt:

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

Ez létrehoz Department-c-t.txt16 rekordot, amelyek mindegyike négy mezőt tartalmaz. A mezőket vessző választja el egymástól.

Meg kell adni a végjeleket a tömeges importáláshoz

Karakter - vagynchar-adatok tömeges importálásakor a tömeges importálás parancsnak fel kell ismernie az adatfájlban használt terminátorokat. A terminátorok megadása a tömeges importálási parancstól függ, a következők szerint:

  • bcp

    Az importálási művelet lezáróelemeinek megadása ugyanazt a szintaxist használja, mint az exportálási műveletnél. További információ: Terminátorok megadása tömeges exportáláshoz, a cikk korábbi részében.

  • BULK INSERT

    A terminátorok a formátumfájl egyes mezőihez vagy a teljes adatfájlhoz az alábbi táblázatban látható minősítők használatával adhatók meg.

    Qualifier Description
    FIELDTERMINATOR = '<field_terminator>' Megadja a karakter- és Unicode-karakteradatfájlokhoz használandó mező-terminátort.

    Az alapértelmezett érték a \t (tabulátor karakter).
    ROWTERMINATOR = '<row_terminator>' Megadja a karakter- és Unicode-karakteradatfájlokhoz használandó sor-terminátort.

    Az alapértelmezett érték a \n (újvonalas karakter).

    További információ: TÖMEGES BESZÚRÁS.

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

    A tömeges sorhalmaz-szolgáltató esetében a OPENROWSET terminátorok csak a formátumfájlban adhatók meg (ez a nagyméretű objektum típusú adattípusok kivételével kötelező). Ha egy karakteradatfájl nem alapértelmezett terminátort használ, azt a formátumfájlban kell definiálni. További információ: Formátumfájl létrehozása (SQL Server) és Formátumfájl használata adatok tömeges importálásához (SQL Server).

    Az OPENROWSET BULK feltételről további információkért tekintse meg az OPENROWSET (BULK) hivatkozást.

Adja meg \n sor terminátorként a tömeges importáláshoz

Ha sor-terminátorként adja meg \n a tömeges importálást, vagy implicit módon használja az alapértelmezett sor-terminátort, a bcp és az BULK INSERT utasítás a sor terminátoraként egy kocsivisszasoros adatcsatorna-kombinációt (CRLF) vár. Ha a forrásfájl csak sorbetöltési karaktert (LF) használ sor-terminátorként, ahogyan az a Unix- és Linux-számítógépeken létrehozott fájlokban megszokott, hexadecimális jelöléssel adja meg az LF sor terminátorát. Például egy BULK INSERT utasításban:

ROWTERMINATOR = '0x0A'

Examples

Az ebben a szakaszban szereplő példák a karakteradatokat tömegesen importálják az Department-c-t.txt adatfájlból, amelyet az előző példában hoztak létre, a myDepartment táblába a AdventureWorks2025 mintaadatbázisban. A példák futtatása előtt létre kell hoznia ezt a táblát. A séma alatti dbo tábla létrehozásához az SQL Server Management Studio Lekérdezésszerkesztőjében hajtsa végre a következő kódot:

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. A bcp használata a terminátorok interaktív megadásához

Az alábbi példa tömegesen importálja az Department-c-t.txt adatfájlt egy bcp paranccsal. Ez a parancs ugyanazokat a parancskapcsolókat használja, mint a tömeges exportálási parancs. További információ: Terminátorok megadása tömeges exportáláshoz, a cikk korábbi részében.

A Windows parancssorba írja be a következő parancsot:

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

B. Terminátorok interaktív megadása a BULK INSERT használatával

Az alábbi példa tömegesen importálja az Department-c-t.txt adatfájlt az BULK INSERT alábbi táblázatban látható minősítőket használó utasítással.

Option Attribute
DATAFILETYPE = 'char' Megadja, hogy az adatmezők karakteradatokként legyenek betöltve.
FIELDTERMINATOR = ',' Vesszőt (,) ad meg mezőelválasztóként.
ROWTERMINATOR = '\n' Újsoros karakterként adja meg a sor terminátorát.

Az SQL Server Management Studio Lekérdezésszerkesztőjében hajtsa végre a következő kódot:

USE AdventureWorks2022;
GO

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