在使用 bcp 時指定相容性資料格式 (SQL Server)

適用範圍: 是SQL Server (所有支援的版本) 是Azure SQL Database 是Azure SQL 受控執行個體 是Azure Synapse Analytics 是平行處理資料倉儲

此主題描述資料格式屬性、欄位特定提示,以及以 SQL Serverbcp 命令的非 XML 格式檔案來儲存逐欄位資料。 大量匯出 SQL Server 資料以大量匯入至另一個程式 (例如另一個資料庫程式) 時,了解這些資訊十分有用。 在來源資料表中的預設資料格式 (原生、字元或 Unicode) 可能和另一個程式所預期的資料配置不相容。如果匯出資料時發生了不相容的狀況,您就必須描述資料配置的方式。

注意

如不熟悉資料匯入或匯出的資料格式,請參閱 大量匯入或大量匯出的資料格式 (SQL Server)

bcp 資料格式屬性

bcp 命令可讓您根據下列資料格式屬性,指定資料檔中每個欄位的結構:

  • 檔案儲存類型

    檔案儲存類型 描述資料如何儲存在資料檔中。 資料可以依其資料庫資料表類型 (原生格式)、依其字元表示 (字元格式),或者依支援隱含轉換的任何資料類型匯出至資料檔;例如,將 smallint 複製為 int。使用者自訂資料類型會依其基底類型匯出。 如需詳細資訊,請參閱 使用 bcp 時指定檔案儲存類型 (SQL Server)

  • 前置長度

    為了讓原生格式的資料大量匯出至資料檔時,能夠有最精簡的檔案儲存方式, bcp 命令會在每個欄位前面都加上一個或多個字元,指出欄位的長度。 這些字元稱作 「長度前置字元」 (Length prefix characters)。 如需詳細資訊,請參閱 使用 bcp 時指定資料檔案的前置長度 (SQL Server)

  • 欄位長度

    欄位長度會指出以字元格式表現資料所需的最大字元數。 如果資料是以原生格式儲存,則欄位長度為已知。 如需詳細資訊,請參閱 使用 bcp 指定欄位長度 (SQL Server)

  • 欄位結束字元

    針對字元資料欄位,選擇性的結束字元讓您可以標示資料檔中每個欄位的結尾 (使用「欄位結束字元」 ),以及每個資料列的結尾 (使用「資料列結束字元」 )。 結束字元可讓讀取資料檔的程式知道某個欄位或資料列在何處結束,另一個在何處開始。 如需詳細資訊,請參閱 指定欄位與資料列結束字元 (SQL Server)

欄位專用提示字元的概觀

如果互動式 bcp 命令包含 inout 選項,但不包含格式檔案參數 ( -f) 或資料格式參數 ( -n-c-w-N),則來源資料表或目標資料表中的每個資料行,會相繼出現每個先前屬性的命令提示字元。 在每個提示字元中, bcp 命令是根據資料表資料行的 SQL Server 資料類型來提供預設值。 接受所有提示字元的預設值,會和在命令行上指定原生格式 ( -n) 產生相同結果。 每個提示都會將預設值顯示於方括號中:[預設值]。 按下 ENTER 即可接受顯示的預設值。 若要指定預設以外的值,請在提示字元中輸入新值。

範例

下列範例使用 bcp 命令,將資料以互動方式從 HumanResources.myTeam 資料表大量匯出至 myTeam.txt 檔案。 您必須先建立此資料表,才能執行範例。 如需此資料表及建立方式的相關資訊,請參閱 HumanResources.myTeam 範例資料表 (SQL Server)

該命令不會指定格式檔案,也不會指定資料類型,因此會導致 bcp 出現提示詢問資料格式資訊。 在 Microsoft Windows 命令提示字元中,輸入:

bcp AdventureWorks.HumanResources.myTeam out myTeam.txt -T  

bcp 會針對每個資料行提示欄位專用的值。 下列範例將為資料表的 EmployeeIDName 資料行,顯示欄位專用的提示字元,並為每個資料行建議預設的檔案儲存類型 (原生格式)。 EmployeeIDName 資料行的前置長度分別為 0 和 2。 使用者指定逗號 (,),作為每個欄位的結束字元。

Enter the file storage type of field EmployeeID [smallint]:

Enter prefix-length of field EmployeeID [0]:

Enter field terminator [none]:,

Enter the file storage type of field Name [nvarchar]:

Enter prefix length of field Name [2]:

Enter field terminator [none]:,

.

.

.

相等的提示字元 (視需要而定) 會依序顯示在每個資料表資料行中。

將逐欄資料儲存至非 XML 格式檔案中

指定所有的資料表資料行之後, bcp 命令會提示您選擇性地產生非 XML 格式檔案,該檔案儲存剛剛提供的逐欄資訊 (請參閱先前範例)。 如果您選擇產生格式檔案,則可以隨時匯出該資料表的資料,或將類結構化資料匯入到 SQL Server。

注意

您可以使用格式檔案,從資料檔中將資料大量匯入到 SQL Server 執行個體,或從資料表中大量匯出資料,而不需重新指定格式。 如需詳細資訊,請參閱 匯入或匯出資料的格式檔案 (SQL Server)>。

下列範例會建立一個名為 myFormatFile.fmt的非 XML 格式檔案。

Do you want to save this format information in a file? [Y/n] y

Host filename: [bcp.fmt]myFormatFile.fmt

格式檔案的預設名稱為 bcp.fmt,但您也可以選擇指定不同的檔案名稱。

注意

若為使用單一資料格式作為檔案儲存類型的資料檔 (例如字元或原生格式),您可以快速建立格式檔案,而不需透過 [格式] 選項來匯出或匯入資料。 此方法的優點是容易使用,並且可讓您建立 XML 格式檔案或非 XML 格式檔案。 如需詳細資訊,請參閱建立格式檔案 (SQL Server)

無。

另請參閱

資料的大量匯入及匯出 (SQL Server)
大量匯入或大量匯出的資料格式 (SQL Server)
bcp 公用程式
資料類型 (Transact-SQL)