適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics Platform System (PDW)
針對字元資料欄位,選擇性結束字元可讓您使用「欄位結束字元」 標示資料檔案中每個欄位的結尾,並使用「資料列結束字元」 標示每個資料列的結尾。 終止字元是一種方法,用於向程式指示數據檔案中一個欄位或資料列結束,而另一個欄位或資料列開始的位置。
重要
在使用原生或 Unicode 原生格式時,請使用長度前綴,而不使用欄位結束字元。 由於原生格式資料檔案存放格式為 Microsoft SQL Server 的內部二進位資料格式,因此原生格式資料可能會與結束字元相衝突。
支援作為終止符號的字符
bcp 命令、BULK INSERT
語句和OPENROWSET
大量數據列集提供者支援各種字元作為欄位或數據列終止符,並一律尋找每個終止符的第一個實例。 下表列出支援作為終結符號的字元。
結束字元 | 由...表示 | 描述 |
---|---|---|
索引標籤 | \t |
這是預設欄位結束字元。 |
新行字元 (Newline Character) | \n |
這是預設資料列結束字元。 |
歸位字元/換行字元 | \r |
|
反斜杠 1 | \ |
|
Null 終止符 (非可見終止符) 2 | \0 |
|
任何可列印的字元(控制字元不可列印,但空字元、定位點、換行符和回車符除外) | (* 、、A t 、、 l 等) |
|
最多包含 10 個可列印字元的字串,包括先前所列的一些或所有結束字元 | (**\t** 、、end !!!!!!!!!! 、、 \t-\n 等) |
1 隻有t
、 n
、 r
0
和 \0
字元會使用反斜杠逸出字元,以產生控制字元。
2 即使列印時看不到 Null 控制字元 (\0
) ,但它是數據檔中的不同字元。 這表示使用 null 控制字元做為欄位或資料列結束字元,和完全沒有欄位或資料列結束字元不同。
重要
如果在數據中發生終止符,該字元會解譯為終止符,而不是數據,而該字元之後的數據會解譯為屬於下一個字段或記錄。 因此,請謹慎選擇終止符,確保它們絕不會出現在您的資料中。 例如,如果數據中包含低位代理,則將低位代理作為欄位終止符不是一個好的選擇。
使用行終止符
資料列結束字元可以和最後一個欄位的結束字元相同。 不過,明確的資料列終止符通常相當有用。 例如,若要產生表格式輸出,請使用換行符(\n
)結束每個資料列中的最後一個字段,並使用製表符(\t
)結束所有其他欄位。 若要將每個數據記錄放在資料檔中自己的一行,請將組合 \r\n
指定為數據列終止符。
注意
當您以互動方式使用 bcp 並將 \n
(newline) 指定為列終止符時,bcp 會自動在其前加上 \r
(回車字元),這會導致列終止符為 \r\n
。
指定大量匯出的終止符
當您大量匯出 char 或 nchar 資料,而且想要使用非預設的結束字元時,就必須對 bcp 命令指定結束字元。 您可以使用下列方式指定結束字元:
使用格式檔案,以逐個欄位指定終結符號。
注意
如需如何使用格式檔案的詳細資訊,請參閱 格式化檔案以匯入或匯出資料 (SQL Server) 。
不使用格式檔案,可使用下列替代方法:
使用
-t
參數來指定除資料列最後一個欄位之外的所有欄位的欄位終止符,並使用-r
參數來指定資料列的終止符。請使用含有字元格式切換的
-c
或-w
,而不使用-t
切換,這會將欄位終止符設定為製表字元\t
。 這與指定-t\t
相同。注意
如果您指定
-n
[原生數據] 或-N
[Unicode 原生] 參數,則不會插入終止符。如果互動式 bcp 命令包含
in
或out
選項,但不含格式檔案參數 (-f
) 或數據格式參數 (-n
、-c
-w
或-N
), 而且您選擇不指定前置詞長度和字段長度,則命令會提示每個欄位的欄位終止符,預設值為 none:Enter field terminator [none]:
預設值通常是適合的選擇。 不過,針對 char 或 nchar 數據欄位,請參閱下列小節「使用終止符的指導方針」。如需在內容中顯示此提示的範例,請參閱 使用 bcp (SQL Server) 時指定相容性數據格式。
注意
以互動方式在 bcp 命令中指定所有欄位之後,此命令會提示您將每個欄位的回應以非 XML 格式的檔案加以儲存。 如需非 XML 格式檔案的詳細資訊,請參閱使用非 XML 格式檔案(SQL Server)。
使用終止符的指導方針
在某些情況中,結束字元對 char 或 nchar 資料欄位而言很有用。 例如:
對於數據行,其中包含數據檔中的 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 筆記錄。 這些欄位會以逗號隔開。
指定批量匯入的終結符
當您大量匯入 char 或 nchar 資料時,大量匯入命令必須辨識資料檔案中使用的結束字元。 指定結束字元的方式因不同的大量匯入命令而異,如下所示:
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
指定為批量匯入的列終止符或隱含使用預設的列終止符時,bcp和BULK 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