共用方式為


指定欄位和資料列結束字元

若為字元資料欄位,選擇性結束字元可讓您使用「欄位結束字元」(Field Terminator) 來標示資料檔中每個欄位的結尾,並使用「資料列結束字元」(Row Terminator) 來標示每個資料列的結尾。結束字元是指示程式從欄位或資料列結束與開始的交接處讀取資料檔的一種方法。

重要事項重要事項

在使用原生或 Unicode 原生格式時,請使用長度前置詞,而不使用欄位結束字元。原生格式資料會與結束字元發生衝突,因為原生格式資料檔是使用 Microsoft SQL Server 的內部二進位資料格式儲存。

支援當做結束字元使用的字元

bcp 命令、BULK INSERT 陳述式和 OPENROWSET BULK 資料列集提供者都支援使用各種字元做為欄位或資料列結束字元,而且永遠會尋找每個結束字元的第一個執行個體。下表列出支援作為結束字元的字元。

結束字元

表示方式

Tab

\t

這是預設欄位結束字元。

新行字元 (Newline Character)

\n

這是預設資料列結束字元。

歸位字元/換行字元

\r

反斜線1

\\

Null 結束字元 (看不見的結束字元)2

\0

任何可列印的字元 (除了 Null 值、定位點、新行字元和 Return 鍵外,控制字元均無法列印)

(*、A、t、l 等等)

最多包含 10 個可列印字元的字串,包括先前所列的一些或所有結束字元

(**\t**、end、!!!!!!!!!!、\t—\n 等)

1:只有 t、n、r、0 和 '\0' 字元可以與反斜線逸出字元搭配使用,以產生控制字元。

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

重要事項重要事項

如果在資料內發現結束字元,它會當作結束字元而非當作資料來解譯,而該字元之後的資料則會解譯為屬於下一個欄位或記錄。因此,請小心選擇結束字元,確定這些結束字元絕不會出現在您的資料中。

使用資料列結束字元

資料列結束字元可以和最後一個欄位的結束字元相同。不過,個別的資料列結束字元通常十分有用。例如,若要產生表格式輸出,請以新行字元 (\n) 結束每個資料列的最後一個欄位,並以定位字元 (Tab) 結束所有其他欄位。若要將每個資料記錄放在資料檔自己的那一行,請指定 \r\n 組合做為資料列結束字元。

[!附註]

以互動方式使用 bcp 並指定 \n (新行) 做為資料列結束字元時,bcp 會自動以 \r (歸位字元) 字元當作前置詞,進而產生資料列結束字元 \r\n。

指定大量匯出的結束字元

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

  • 使用格式檔案,按個別欄位逐一指定結束字元。

    [!附註]

    如需有關如何使用格式檔案的詳細資訊,請參閱<用於匯入或匯出資料的格式檔案>。

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

    • 使用 -t 參數,對資料列中最後一個欄位以外的所有欄位指定資料列結束字元,並使用 -r 參數來指定資料列結束字元。

    • 使用字元格式參數 (-c-w) 但不使用 -t 參數,將欄位結束字元設定為定位字元 \t。這與指定 -t\t 相同。

      [!附註]

      如果指定 -n (原生資料) 或 -N (Unicode 原生) 參數,則不會插入結束字元。

    • 如果互動式 bcp 命令包含 inout 選項,但不使用格式檔案參數 (-f) 或資料格式參數 (-n-c-w-N),而且您選擇不指定前置長度和欄位長度,則該命令會提示輸入每個欄位的欄位結束字元 (預設是沒有)。

      Enter field terminator [none]:

      預設值通常是適合的選擇。不過,有關 char 或 nchar 資料欄位,請參閱以下<使用結束字元的指導方針>細項。如需在內容中顯示此提示的範例,請參閱<使用 bcp 指定相容性的資料格式>。

      [!附註]

      以互動方式在 bcp 命令中指定所有欄位之後,此命令會提示您將每個欄位的回應儲存在非 XML 格式的檔案中。如需有關非 XML 格式檔案的詳細資訊,請參閱<了解非 XML 格式檔案>。

使用結束字元的指導方針

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

  • 某個資料行包含資料檔中的 Null 值,而且該資料檔將匯入不了解前置長度資訊的程式中。

    包含 Null 值的任何資料行都會被視為可變長度。如果前置長度不存在,就必須使用結束字元來識別 Null 欄位的結尾,確保系統正確解譯資料。

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

    在此情況中,指定結束字元可以盡量減少儲存空間,讓欄位被視為可變長度的欄位。如需有關前置長度、欄位長度和結束字元對 char 資料儲存之相互作用的詳細資訊,請參閱<字元格式資料的儲存>。

範例

這個範例會使用字元格式,將資料從 AdventureWorksHumanResources.Department 資料表大量匯出到 Department-c-t.txt 資料檔,並以逗點做為欄位結束字元,以新行字元 (\n) 做為資料列結束字元。

bcp 命令包含下列參數。

參數

說明

-c

指定以字元資料載入資料欄位。

-t,

指定逗號 (,) 當做欄位結束字元。

-r \n

指定資料列結束字元為新行字元。這是預設資料列結束字元,因此可選擇性指定。

-T

指定 bcp 公用程式使用整合式安全性的信任連接,連接到 SQL Server。如果未指定 -T,您就必須指定 -U-P,才能順利登入。

如需詳細資訊,請參閱<bcp 公用程式>。

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

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

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

指定大量匯入的結束字元

當您大量匯入 char 或 nchar 資料時,大量匯入命令必須辨識資料檔中使用的結束字元。指定結束字元的方式視大量匯入命令而定,如下所示:

  • bcp

    指定匯入作業結束字元所使用的語法,與用於匯出作業的語法相同。如需詳細資訊,請參閱本主題前面的「指定大量匯出的結束字元」。

  • BULK INSERT

    您可以使用下表所示的限定詞,針對格式檔案中的個別欄位或整個資料檔指定結束字元。

    限定詞

    說明

    FIELDTERMINATOR ='field_terminator'

    指定要用於字元和 Unicode 字元資料檔中的欄位結束字元。

    預設值是 \t (定位字元)。

    ROWTERMINATOR ='row_terminator'

    指定要用於字元和 Unicode 字元資料檔中的資料列結束字元。

    預設值是 \n (新行字元)。

    如需詳細資訊,請參閱<BULK INSERT (Transact-SQL)>。

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

    針對 OPENROWSET 大量資料列集提供者,只可以在格式檔案中指定結束字元 (除了大型物件資料類型以外都需要格式檔案)。如果字元資料檔使用非預設結束字元,則必須在格式檔案中加以定義。如需詳細資訊,請參閱<建立格式檔案>和<使用格式檔案大量匯入資料>。

    如需有關 OPENROWSET BULK 子句的詳細資訊,請參閱<OPENROWSET (Transact-SQL)>。

範例

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

USE AdventureWorks2008R2;
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. 使用 bcp 以互動方式指定結束字元

下列範例會使用 bcp 命令,大量匯入 Department-c-t.txt 資料檔。此命令與大量匯出命令使用相同的命令參數。如需詳細資訊,請參閱本主題前面的「指定大量匯出的結束字元」。

在 Windows 命令提示字元上輸入:

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

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

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

選項

屬性

DATAFILETYPE ='char'

指定以字元資料載入資料欄位。

FIELDTERMINATOR =','

指定逗號 (,) 作為欄位結束字元。

ROWTERMINATOR ='\n'

指定資料列結束字元為新行字元。

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

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