共用方式為


指定欄位與資料列結束符 (SQL Server)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

針對字元資料欄位,選擇性結束字元可讓您使用「欄位結束字元」 標示資料檔案中每個欄位的結尾,並使用「資料列結束字元」 標示每個資料列的結尾。 終止字元是一種方法,用於向程式指示數據檔案中一個欄位或資料列結束,而另一個欄位或資料列開始的位置。

重要

在使用原生或 Unicode 原生格式時,請使用長度前綴,而不使用欄位結束字元。 由於原生格式資料檔案存放格式為 Microsoft SQL Server 的內部二進位資料格式,因此原生格式資料可能會與結束字元相衝突。

支援作為終止符號的字符

bcp 命令、BULK INSERT語句和OPENROWSET大量數據列集提供者支援各種字元作為欄位或數據列終止符,並一律尋找每個終止符的第一個實例。 下表列出支援作為終結符號的字元。

結束字元 由...表示 描述
索引標籤 \t 這是預設欄位結束字元。
新行字元 (Newline Character) \n 這是預設資料列結束字元。
歸位字元/換行字元 \r
反斜杠 1 \
Null 終止符 (非可見終止符) 2 \0
任何可列印的字元(控制字元不可列印,但空字元、定位點、換行符和回車符除外) *、、At、、 l等)
最多包含 10 個可列印字元的字串,包括先前所列的一些或所有結束字元 **\t**、、end!!!!!!!!!!、、 \t-\n等)

1 隻有tnr0\0 字元會使用反斜杠逸出字元,以產生控制字元。

2 即使列印時看不到 Null 控制字元 (\0) ,但它是數據檔中的不同字元。 這表示使用 null 控制字元做為欄位或資料列結束字元,和完全沒有欄位或資料列結束字元不同。

重要

如果在數據中發生終止符,該字元會解譯為終止符,而不是數據,而該字元之後的數據會解譯為屬於下一個字段或記錄。 因此,請謹慎選擇終止符,確保它們絕不會出現在您的資料中。 例如,如果數據中包含低位代理,則將低位代理作為欄位終止符不是一個好的選擇。

使用行終止符

資料列結束字元可以和最後一個欄位的結束字元相同。 不過,明確的資料列終止符通常相當有用。 例如,若要產生表格式輸出,請使用換行符(\n)結束每個資料列中的最後一個字段,並使用製表符(\t)結束所有其他欄位。 若要將每個數據記錄放在資料檔中自己的一行,請將組合 \r\n 指定為數據列終止符。

注意

當您以互動方式使用 bcp 並將 \n(newline) 指定為列終止符時,bcp 會自動在其前加上 \r(回車字元),這會導致列終止符為 \r\n

指定大量匯出的終止符

當您大量匯出 charnchar 資料,而且想要使用非預設的結束字元時,就必須對 bcp 命令指定結束字元。 您可以使用下列方式指定結束字元:

  • 使用格式檔案,以逐個欄位指定終結符號。

    注意

    如需如何使用格式檔案的詳細資訊,請參閱 格式化檔案以匯入或匯出資料 (SQL Server)

  • 不使用格式檔案,可使用下列替代方法:

    • 使用 -t 參數來指定除資料列最後一個欄位之外的所有欄位的欄位終止符,並使用 -r 參數來指定資料列的終止符。

    • 請使用含有字元格式切換的-c-w,而不使用-t切換,這會將欄位終止符設定為製表字元\t。 這與指定 -t\t相同。

      注意

      如果您指定 -n [原生數據] 或 -N [Unicode 原生] 參數,則不會插入終止符。

    • 如果互動式 bcp 命令包含 inout 選項,但不含格式檔案參數 (-f) 或數據格式參數 (-n-c-w-N), 而且您選擇不指定前置詞長度和字段長度,則命令會提示每個欄位的欄位終止符,預設值為 none:

      Enter field terminator [none]:

      預設值通常是適合的選擇。 不過,針對 charnchar 數據欄位,請參閱下列小節「使用終止符的指導方針」。如需在內容中顯示此提示的範例,請參閱 使用 bcp (SQL Server) 時指定相容性數據格式

      注意

      以互動方式在 bcp 命令中指定所有欄位之後,此命令會提示您將每個欄位的回應以非 XML 格式的檔案加以儲存。 如需非 XML 格式檔案的詳細資訊,請參閱使用非 XML 格式檔案(SQL Server)。

使用終止符的指導方針

在某些情況中,結束字元對 charnchar 資料欄位而言很有用。 例如:

  • 對於數據行,其中包含數據檔中的 Null 值,該數據行會匯入到不瞭解前置詞長度信息的程式。

    包含 Null 值的任何資料行會被視為可變長度。 如果沒有使用前置長度,則需要使用結束符號來識別 Null 欄位的結尾,以確保資料被正確解譯。

  • 許多資料列只使用其部分空間的固定長度長資料行。

    在這種狀況下,指定結束字元可縮小儲存空間,允許欄位視為可變長度欄位。

指定 \n 為大容量匯出的數據列終止符

當您針對大量匯出指定 \n 做為資料列結束字元,或以隱含方式使用預設的資料列結束字元時,bcp 會輸出歸位字元與換行字元的組合 (CRLF) 做為資料列結束字元。 如果您想只輸出換行字元(LF)作為列結束符號(這在 Unix 和 Linux 電腦上很常見),請使用十六進位表示來指定 LF。 例如:

bcp -r '0x0A'

範例

此範例會使用字元格式、以逗號作為欄位結束字元,而且以新行字元 (\n) 作為資料列結束字元,將資料從 AdventureWorks2022.HumanResources.Department 資料表大量匯出資料至 Department-c-t.txt 資料檔案。

bcp 命令包含下列參數。

開關 描述
-c 指定將資料欄位以字元資料類型載入。
-t , 指定逗號 (,) 做為欄位結束字元。
-r \n 指定資料列結束字元為新行字元。 這是預設的數據列終止符,因此指定它是選擇性的。
-T 指定 bcp 公用程式使用整合式安全性的受信任連線,連線到 SQL Server。 如果-T未指定,您必須指定-U-P才能成功登入。

如需相關資訊,請參閱 bcp Utility

在 Microsoft Windows 命令提示字元中,輸入:

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

這會建立 Department-c-t.txt,四個欄位中各包含 16 筆記錄。 這些欄位會以逗號隔開。

指定批量匯入的終結符

當您大量匯入 charnchar 資料時,大量匯入命令必須辨識資料檔案中使用的結束字元。 指定結束字元的方式因不同的大量匯入命令而異,如下所示:

  • bcp

    指定匯入作業結束字元所使用的語法,與用於匯出作業的語法相同。 如需更多資訊,請參見指定大量匯出終止符,位於本文前段。

  • BULK INSERT

    您可以使用下表所示的限定元,為格式檔案中的個別欄位或整個數據檔指定終止符。

    限定詞 描述
    FIELDTERMINATOR = '<field_terminator>' 指定用於字元和 Unicode 字元資料檔中的欄位終止符。

    預設值為 \t(Tab 字元)。
    ROWTERMINATOR = '<row_terminator>' 指定要用於字元和 Unicode 字元資料檔中的資料列結束字元。

    預設值為 \n (換行符)。

    如需詳細資訊,請參閱 BULK INSERT

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

    OPENROWSET對於批量資料列集提供者,終止符只能在格式檔案中指定(格式檔案對大型物件數據類型除外是必須的)。 如果字元資料檔使用非預設結束字元,則必須在格式檔案中加以定義。 如需詳細資訊,請參閱建立格式檔案 (SQL Server)使用格式檔案大量匯入資料 (SQL Server)

    如需關於OPENROWSET BULK 子句的詳細資訊,請參閱 OPENROWSET (BULK)

指定 \n 為大容量導入的數據列終止符

當您將\n指定為批量匯入的列終止符或隱含使用預設的列終止符時,bcpBULK INSERT語句預期使用回車換行符(CRLF)作為列終止符。 如果您的來源檔案只使用行進字元 (LF) 作為數據列終止符,如同 Unix 和 Linux 計算機上產生的檔案一般,請使用十六進位表示法來指定 LF 數據列終止符。 例如,在語句BULK INSERT

ROWTERMINATOR = '0x0A'

範例

這一節中的範例會將字元資料從先前範例中建立的 Department-c-t.txt 資料檔案,大量匯入到 myDepartment 範例資料庫中的 AdventureWorks2022 資料表。 您必須先建立這個資料表,才能執行範例。 若要在 dbo 架構下建立此數據表,請在 SQL Server Management Studio 查詢編輯器中執行下列程式代碼:

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 以互動方式指定結束字元

下列範例會使用 Department-c-t.txt 命令,大量匯入 bcp 資料檔。 此命令與大量匯出命令使用相同的命令參數。 如需更多資訊,請參見指定大量匯出終止符,位於本文前段。

在 Windows 命令提示字元中,輸入下列命令:

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

B. 使用 BULK INSERT 以互動方式指定結束字元

下列範例會使用 Department-c-t.txt 陳述式 (其中使用下表所示的限定詞),大量匯入 BULK INSERT 資料檔。

選項 屬性
DATAFILETYPE = 'char' 指定將資料欄位以字元資料類型載入。
FIELDTERMINATOR = ',' 指定逗號 (,) 作為欄位結束字元。
ROWTERMINATOR = '\n' 指定資料列結束字元為新行字元。

在 SQL Server Management Studio 查詢編輯器 中,執行下列程式碼:

USE AdventureWorks2022;
GO

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