共用方式為


bcp 公用程式

bcp 公用程式會以使用者指定的格式,在 Microsoft sql Server 實例與數據檔之間大量複製數據。 bcp 公用程式可用來將大量新資料列匯入 SQL Server 資料表,或是將資料表的資料匯出成資料檔案。 除了搭配 queryout 選項使用之外,此公用程式不需要任何 Transact-SQL 方面的知識。 若要將資料匯入資料表中,您必須使用專為這份資料表而建立的格式檔,或了解資料表的結構及其資料行的有效資料類型。

主題連結圖示如需用於 bcp 語法的語法慣例,請參閱 Transact-SQL 語法慣例(Transact-SQL)。

注意

若您使用 bcp 備份資料,請建立格式檔案以記錄資料格式。 bcp 資料檔不包含任何架構或格式資訊,因此如果卸載數據表或檢視表,而且您沒有格式檔案,則可能無法匯入數據。

語法

  
   bcp [database_name.] schema.{table_name | view_name | "query" {indata_file | outdata_file | queryoutdata_file | format nul}  
  
[-apacket_size]  
[-bbatch_size]  
[-c]  
[-C { ACP | OEM | RAW | code_page } ]  
[-ddatabase_name]  
[-eerr_file]  
[-E]  
[-fformat_file]  
[-Ffirst_row]  
[-h"hint [,...n]"]   
[-iinput_file]  
[-k]  
[-Kapplication_intent]  
[-Llast_row]  
[-mmax_errors]  
[-n]  
[-N]  
[-ooutput_file]  
[-Ppassword]  
[-q]  
[-rrow_term]  
[-R]  
[-S [server_name[\instance_name]]  
[-tfield_term]  
[-T]  
[-Ulogin_id]  
[-v]  
[-V (80 | 90 | 100 | 110)]  
[-w]  
[-x]  
/?  

引數

data_file
這是資料檔案的完整路徑。 當資料大量匯入 SQL Server 時,資料檔案會包含要複製到指定資料表或檢視表的資料。 從 SQL Server 大量匯出資料時,資料檔案會包含從資料表或檢視表複製的資料。 路徑可以有 1 至 255 個字元。 數據檔最多可以包含 263 - 1 個數據列。

database_name
這是指定之資料表或檢視表所在的資料庫名稱。 若未指定,這就是使用者的預設資料庫。

您也可以使用 d- 明確指定資料庫名稱。

in data_file | outdata_file queryoutdata_file | | format nul
請依照下列方式指定大量複製的方向:

  • in 會從檔案複製到資料庫資料表或檢視。

  • out 會從資料庫資料表或檢視複製到檔案。 若您指定現有的檔案,將會覆寫該檔案。 擷取數據時, 請注意,bcp 公用程式會將空字串表示為 Null,並以 Null 字串表示為空字串。

  • queryout 會從查詢複製資料,而且只有從查詢複製大量資料時才可指定。

  • format 會根據指定的選項 (-n、 、 -c-w-N) 和數據表或檢視分隔符來建立格式檔案。 大量複製數據時, bcp 命令可以參考格式檔案,以互動方式儲存您重新輸入格式資訊。 format 選項需要 -f 選項;建立 XML 格式檔案也需要 -x 選項。 如需詳細資訊,請參閱建立格式檔案 (SQL Server)。 您必須將 nul 指定為值 (format nul)。

擁有者
這是資料表或檢視表的擁有者名稱。 如果執行作業的用戶擁有指定的數據表或檢視表,則擁有者 是選擇性的。 如果未 指定擁有者 ,且執行作業的用戶沒有擁有指定的數據表或檢視表,SQL Server 會傳回錯誤訊息,並取消作業。

“ query
這是傳回結果集的 Transact-SQL 查詢。 如果查詢傳回多個結果集,則只會將第一個結果集複製到資料檔案中,並會忽略接下來的結果集。 請利用雙引號括住查詢,利用單引號括住內嵌在查詢中的任何項目。 從查詢中複製大量資料時,也必須指定queryout

只要在預存程序內參考的所有資料表在 bcp 陳述式執行之前就已存在,查詢就可以參考預存程序。 例如,如果預存程序產生暫存資料表,則 bcp 陳述式會失敗,這是因為暫存資料表只可在執行階段使用,而無法在陳述式執行階段使用。 在此種情況下,請考慮將預存程序的結果插入資料表中,然後使用 bcp 將資料表的資料複製到資料檔案。

table_name
這是將資料匯入 SQL Server (in) 時的目的地資料表名稱,以及從 SQL Server (out) 匯出資料時的來源資料表名稱。

view_name
這是將資料複製到 SQL Server (in) 時的目的地檢視表名稱,以及從 SQL Server (out) 中複製資料時的來源檢視表名稱。 只有所有資料行都參考相同資料表的檢視表,才能用來做為目的地檢視表。 如需將資料複製到檢視表之限制的詳細資訊,請參閱 INSERT (Transact-SQL)

-a packet_size
指定伺服器所收送之每個網路封包的位元組數。 您可以利用 SQL Server Management Studio (或 sp_configure 系統預存程序) 來設定伺服器組態選項。 但是使用此選項可以個別地覆寫伺服器組態選項。 packet_size可以是 4096 到 65535 個字節;預設值為 4096。

增加封包大小可以增強大量複製作業的效能。 若要求了較大的封包但無法為您授與該封包,便會使用預設值。 bcp 公用程式所產生的效能統計資料,會顯示所用的封包大小。

-b batch_size
指定每一批次匯入資料的資料列數。 每一批次會以個別交易的方式 (在認可之前匯入整個批次) 匯入及記錄。 根據預設,資料檔案中的所有資料列是以一個批次匯入。 若要在多個批次之間分散資料列,請指定小於資料檔案之資料列數目的 batch_size 。 如果有任何批次的交易失敗,只回復目前批次的插入項。 之後的失敗不會影響已認可的交易所匯入的批次。

請勿將此選項與 **-h“**ROWS_PER_BATCH =bb 選項搭配使用。

-c
利用字元資料類型來執行作業。 此選項不會提示每個欄位;它會使用 char 作為儲存類型,不含前置詞,並以 \t (Tab 字元) 做為欄位分隔符,而 \r\n (換行字元)則做為數據列終止符。 -c-w不相容。

如需詳細資訊,請參閱使用字元格式匯入或匯出資料 (SQL Server)

-C { ACP | OEM | RAW | code_page }
指定資料檔案中之資料的字碼頁。 只有當數據包含charvarchar字元值大於 127 或text小於 32 的數據行時,code_page才相關。

注意

建議您為格式檔案中的每個資料列指定定序名稱。

字碼頁值 描述
ACP ANSI/Microsoft Windows (ISO 1252)。
OEM 用戶端所用的預設字碼頁。 如果未指定 -C ,這是預設字碼頁。
RAW 不會將字碼頁轉換成另一種字碼頁。 這是最快的選項,因為不進行轉換。
code_page 特定字碼頁編號;如 850。

** 重要 ** SQL Server 不支持代碼頁 65001 (UTF-8 編碼)。

-ddatabase_name
指定要連接的資料庫。 根據預設,bcp.exe 會連線到使用者的預設資料庫。 如果 -d指定 database_name和三個部分名稱(database_name.schema.table,當做第一個參數傳遞至 bcp.exe),就會發生錯誤,因為您無法指定資料庫名稱兩次。如果 database_name 開頭為連字元 (-) 或正斜線 (/),請勿在 與資料庫名稱之間 -d 新增空格。

-e err_file
指定錯誤檔的完整路徑,該錯誤檔用來儲存 bcp 公用程式無法從檔案傳送至資料庫的任何資料列。 bcp 命令所產生的錯誤訊息,會送往使用者的工作站。 如果未使用這個選項,就不會建立錯誤檔。

如果 err_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -eerr_file 值之間加上空格。

-E
指定識別欄位要使用匯入之資料檔案中的一個或多個識別值。 如果未提供 -E,就會略過匯入的資料檔案中此資料行的識別值,且 SQL Server 會根據建立資料表期間所指定的初始值與遞增值,自動指派唯一值。

如果資料檔案中沒有資料表或檢視表中之識別欄位的值,請利用格式檔指定,在匯入資料時,應該略過資料表或檢視表中的識別欄位;SQL Server 會自動指派資料行的唯一值。 如需詳細資訊,請參閱 DBCC CHECKIDENT (Transact-SQL)

-E 選項有特殊權限需求。 如需詳細資訊,請參閱本主題稍後的備註一節。

-f format_file
指定格式檔的完整路徑。 這個選項的意義會隨著使用它的環境而有所不同,如下所示:

  • 如果 -fformat 選項一起使用,會對指定的資料表或檢視表建立所指定的 format_file 。 若要建立 XML 格式檔案,也請指定 -x 選項。 如需詳細資訊,請參閱建立格式檔案 (SQL Server)

  • 搭配 inout 選項一起使用時, -f 需要現有的格式檔案。

    注意

    使用格式檔,其中的 inout 選項為選擇性。 如果沒有 -f 選項,如果未 指定 -n-c-w-N ,命令會提示您輸入格式資訊,並可讓您將回應儲存在格式檔案中(其默認檔名為 Bcp.fmt)。

如果 format_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -fformat_file 值之間加上空格。

-F first_row
指定要從資料表匯出或從資料檔案匯入之第一個資料列的號碼。 這個參數需要大於 (>) 0、小於 (<) 或等於 (=) 總列數的值。 如果沒有這個參數,預設值是檔案中的第一個資料列。

first_row 可以是值高達 2^63-1 的正整數。 -Ffirst_row 以 1 為基礎。

-h“ hint[ ... n]
指定將資料大量匯入資料表或檢視表期間所使用的一或多個提示。

ORDER**(column[ASC |DESC] [...n]]**
資料檔案中之資料的排序順序。 如果匯入資料時是依照資料表的叢集索引來排序,將可提升大量匯入的效能。 如果不是依照叢集索引鍵的順序排序資料檔案,或是資料表沒有叢集索引,便會忽略 ORDER 子句。 提供的資料行名稱必須是目的地資料表中的有效資料行名稱。 根據預設, bcp 會假設資料檔案沒有排序。 為了達到最佳的大量匯入效果,SQL Server 也會驗證匯入的資料是否已排序。

=ROWS_PER_BATCH bb
每一批資料的資料列數目 (如 bb)。 在未指定 -b 時使用,結果會將整個資料檔案當做單一交易來傳給伺服器。 伺服器根據 bb值,將大量載入最佳化。 根據預設,ROWS_PER_BATCH 是未知的。

= KILOBYTES_PER_BATCH副本
每一批資料的近似 KB 數 (如 cc)。 依預設,KILOBYTES_PER_BATCH 是未知的。

TABLOCK
指定在大量載入作業期間取得大量更新數據表層級鎖定;否則,會取得數據列層級鎖定。 這個提示會大幅提升效能,因為在大量複製作業期間保留鎖定,會減少競爭資料表鎖定的情況。 如果資料表沒有索引,且指定了 TABLOCK ,多個用戶端便可以同時載入這份資料表。 根據預設,鎖定行為是由資料表選項 table lock on bulk load所決定。

CHECK_CONSTRAINTS
指定在大量匯入作業期間,必須檢查目標資料表或檢視表的所有條件約束。 如果沒有CHECK_CONSTRAINTS提示,則會忽略任何 CHECK 和 FOREIGN KEY 條件約束,而且在作業之後,數據表上的條件約束會標示為不受信任。

注意

一律強制實施 UNIQUE、PRIMARY KEY 和 NOT NULL 條件約束。

在某些時候,您必須檢查整份資料表的條件約束。 如果在大量匯入作業之前,資料表不是空的,重新驗證條件約束的成本,可能會超出在累加資料上套用 CHECK 條件約束的成本。 因此,建議您在進行累加大量匯入期間,通常要啟用條件約束檢查。

如果輸入資料包含違反條件約束的資料列,您可能會想停用條件約束 (預設行為)。 當停用 CHECK 條件約束時,您可以先匯入資料,再利用 Transact-SQL 陳述式來移除無效的資料。

注意

bcp 現在會強制執行數據驗證和數據檢查,如果腳本在數據檔中的無效數據上執行,可能會導致腳本失敗。

注意

-m max_errors 參數不適用於條件約束檢查。

FIRE_TRIGGERS
利用 in 引數加以指定,任何定義於目的地資料表上的插入觸發程序,都會在大量複製作業期間執行。 如果未指定 FIRE_TRIGGERS,就不會執行任何插入觸發程序。 outqueryoutformat 引數會略過 FIRE_TRIGGERS。

-i input_file
指定回應檔的名稱,其中包含使用互動式模式執行大量複製時,針對每個數據欄位的命令提示字元問題回應(-n、、 -c-w-N 未指定)。

如果 input_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -iinput_file 值之間加上空格。

-k
指定空白資料行在作業過程中應保持 Null 值,而非保有插入之資料行的任何預設值。 如需詳細資訊,請參閱大量匯入期間保留 Null 或使用預設值 (SQL Server)

-K application_intent
宣告連接到伺服器時的應用程式工作負載類型。 唯一可能的值是 ReadOnly。 如果未 指定 -K ,則bcp公用程式不支援連線至AlwaysOn可用性群組中的次要複本。 如需詳細資訊,請參閱使用中次要:可讀取的次要複本(AlwaysOn 可用性群組)。

-L last_row
指定要從資料表匯出或從資料檔案匯入的最後一個資料列的號碼。 這個參數需要大於 (>) 0 但小於 (<) 或等於 (=) 最後一個資料列號碼的值。 如果沒有這個參數,預設值是檔案中的最後一個資料列。

last_row 可以是值高達 2^63-1 的正整數。

-m max_errors
指定 bcp 作業取消前,可以出現的語法錯誤數上限。 語法錯誤也暗示著對於目的地資料類型的資料轉換錯誤。 max_errors 總計將只能在伺服器偵測的錯誤排除在外,例如條件約束違規。

將會忽略 bcp 公用程式無法複製的資料列,並計算為一次錯誤。 如果未併入這個選項,預設值是 10。

注意

-m 選項也不適用於轉換 moneybigint 數據類型。

-n
利用資料的原生 (資料庫) 資料類型來執行大量複製作業。 並非每個欄位都有這個選項的提示。它會使用原生值。

如需詳細資訊,請參閱使用原生格式匯入或匯出資料 (SQL Server)

-N
如果是非字元資料,請使用資料的原生 (資料庫) 資料類型執行大量複製作業;如果是字元資料,請使用 Unicode 字元執行大量複製作業。 這個選項為 -w 選項提供效能較高的替代方案,目的在於利用資料檔案,在 SQL Server 的執行個體之間轉移資料。 並非每個欄位都有這項提示。 當您要傳送的資料包含 ANSI 擴充字元而且您要利用原生模式的效能時,請使用這個選項。

如需詳細資訊,請參閱使用 Unicode 原生格式匯入或匯出資料 (SQL Server)

如果您使用 bcp.exe 搭配 -N 匯出數據,然後將數據匯入至相同的數據表架構,則如果長度固定、非 Unicode 字元數據行(例如,) char(10),您可能會看到截斷警告。

可以忽略此警告。 解決這個警告的其中一種方式是使用 -n 取代 -N

-o output_file
指定接收來自命令提示字元重新導向之輸出的檔案名稱。

如果 output_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -ooutput_file 值之間加上空格。

-P password
指定登入識別碼的密碼。 如果未使用此選項, bcp 命令會提示您輸入密碼。 如果在未使用密碼的情況下,於命令提示字元尾端使用此選項, bcp 就會使用預設密碼 (NULL)。

重要

請勿使用空白密碼。 請使用增強式密碼。

若要遮罩您的密碼,請勿連同 -P 選項指定 -U 選項。 而是改為在搭配 -U 選項及其他參數 (不指定 -P ) 指定 bcp之後,按 ENTER,該命令就會提示您輸入密碼。 這個方法可確保在輸入密碼時,遮罩您的密碼。

如果 password 的開頭是連字號 (-) 或斜線 (/),請勿在 -Ppassword 值之間加上空格。

-q
bcp 公用程式與 SQL Server 執行個體之間的連線中,執行 SET QUOTED_IDENTIFIERS ON 陳述式。 請利用這個選項來指定包含空格或單引號的資料庫、擁有者、資料表或檢視表名稱。 請用引號 ("") 括住整個三部分資料表或檢視表名稱。

若要指定包含空格或單引號的資料庫名稱,您必須使用 -q 選項。

-q 不適用於傳遞至 -d的值。

如需詳細資訊,請參閱本主題稍後的 備註一節。

-r row_term
指定資料列結束字元。 預設值是 \n (新行字元)。 請利用這個參數來覆寫預設的資料列結束字元。 如需詳細資訊,請參閱指定欄位與資料列結束字元 (SQL Server)

如果您在 bcp.exe 命令中使用十六進位表示法來指定資料列結束字元,該值將會在 0x00 處截斷。 例如,如果您指定 0x410041,將會使用 0x41。

如果 row_term 的開頭是連字號 (-) 或斜線 (/),請勿在 -rrow_term 值之間加上空格。

-R
指定要使用針對用戶端電腦地區設定定義的區域格式,將貨幣、日期和時間資料大量複製到 SQL Server 中。 依預設,會忽略地區設定。

-S server_name[ \instance_name]
指定要連線的 SQL Server 執行個體。 如果未指定任何伺服器,bcp 公用程式會連接至本機電腦的 SQL Server 預設執行個體。 透過網路上的遠端電腦或本機具名執行個體執行 bcp 指令時,此選項為必要選項。 若要連線至伺服器上的 SQL Server 預設執行個體,只要指定 server_name。 若要連接至 SQL Server 的具名執行個體,請指定 server_name*\*instance_name

-tfield_term
指定欄位結束字元。 預設值是 \t (定位字元)。 請利用這個參數來覆寫預設的欄位結束字元。 如需詳細資訊,請參閱指定欄位與資料列結束字元 (SQL Server)

如果您在 bcp.exe 命令中使用十六進位表示法來指定欄位結束字元,該值將會在 0x00 處截斷。 例如,如果您指定 0x410041,將會使用 0x41。

如果field_term以連字元 (-) 或正斜線 (/) 開頭,則不包含 與 field_term 值之間的-t空格。

-T
指定 bcp 公用程式使用整合式安全性的信任連線來連線至 SQL Server。 網路使用者的安全性認證、 login_idpassword 不是必要的選項。 如果未指定 -T ,則必須指定 -U-P ,才能順利登入。

-U login_id
指定用來連接至 SQL Server 的登入識別碼。

重要

指定 bcp 公用程式要使用整合式安全性的信任連線,連線至 SQL Server 時,請使用 -T 選項 (信任連線),而非使用者名稱密碼的組合。

-v
報告 bcp 公用程式版本號碼和著作權。

-V80 90 | | 100| 110)
利用舊版 SQL Server 的資料類型執行大量複製作業。 不是每個欄位都有這個選項的提示,它會使用預設值。

80 = SQL Server 2000

90 = SQL Server 2005

100 = SQL Server 2008 和 SQL Server 2008 R2

110 = SQL Server 2012

例如,若要為 SQL Server 2000 不支援的類型產生數據,但在更新版本的 SQL Server 中引進,請使用 -V80 選項。

如需詳細資訊,請參閱 從舊版 SQL Server 匯入原生與字元格式資料

-w
利用 Unicode 字元執行大量複製作業。 此選項不會提示每個欄位;它使用 nchar 作為儲存類型、無前置詞、 \t (製表符)做為字段分隔符,而 \n (換行符)則做為數據列終止符。 -w-c不相容。

如需詳細資訊,請參閱使用 Unicode 字元格式匯入或匯出資料 (SQL Server)

-x
format-fformat_file 選項一起使用會產生以 XML 為基礎的格式檔案,而非預設的非 XML 格式檔案。 匯入或匯出資料時, -x 無法運作。 如果沒有與 format-fformat_file 一起使用,則會產生錯誤。

備註

當您安裝 MicrosoftSQL Server 2014 工具時,會安裝 bcp 12.0 用戶端。 如果針對 SQL Server 2014 和舊版 SQL Server 安裝工具,視 PATH 環境變數的值而定,您可能會使用先前的 bcp 用戶端,而不是 bcp 12.0 用戶端。 這個環境變數定義了 Windows 用來搜尋可執行檔的一組目錄。 若要探索您使用的版本,請在 Windows 命令提示字元中執行 bcp /v 命令。 如需如何在PATH環境變數中設定命令路徑的資訊,請參閱Windows說明。

只有在同時安裝 SQL Server 工具和 SQL Server Native Client 時,才能支援 XML 格式檔案。

如需 bcp 公用程式的尋找位置與執行方式,以及命令提示字元公用程式語法慣例的資訊,請參閱命令提示字元公用程式參考 (資料庫引擎)

如需針對大量匯入或匯出作業準備資料的相關資訊,請參閱準備大量匯出或匯入的資料 (SQL Server)

如需大量匯入所執行的資料列插入作業於何時記錄到交易記錄的資訊,請參閱 大量匯入採用最低限度記錄的必要條件

原生資料檔案支援

在 SQL Server 2014 中, bcp 公用程式支援與 SQL Server 2000、SQL Server 2005、SQL Server 2008、SQL Server 2008 R2 和 SQL Server 2012 兼容的原生數據檔。

計算資料行和時間戳記資料行

系統會忽略要針對計算或 timestamp 數據行匯入之數據檔中的值,而 SQL Server 會自動指派值。 如果數據檔不包含資料表中計算數據行 timestamp 的值,請使用格式檔案來指定匯入數據時應該略過數據表中的計算或 timestamp 數據行;SQL Server 會自動指派數據行的值。

計算和數據 timestamp 行會像往常一樣從 SQL Server 大量複製到數據檔。

指定包含空格或引號的識別碼

SQL Server 識別碼可以包括內嵌空格和引號之類的字元。 您必須依照下列方式來處理這些識別碼:

  • 當您在命令提示字元之下,指定包含空格或引號的識別碼或檔案名稱時,請用引號 ("") 括住識別碼。

    例如,下列 bcp out 命令會建立名稱為 Currency Types.dat的資料檔案:

    bcp AdventureWorks2012.Sales.Currency out "Currency Types.dat" -T -c  
    
  • 若要指定包含空格或引號的資料庫名稱,您必須使用 -q 選項。

  • 如果擁有者、資料表或檢視表名稱包含內嵌的空格或引號,您可以執行下列動作:

    • 指定 -q 選項,或者

    • 在引號內,用方括號 ([]) 括住擁有者、資料表或檢視表名稱。

資料驗證

bcp 現在會強制執行數據驗證和數據檢查,如果腳本在數據檔中的無效數據上執行,可能會導致腳本失敗。 例如, bcp 現在會驗證:

  • real 數據類型的float原生表示法有效。

  • Unicode 資料的長度是否為偶數位元組。

可在舊版 SQL Server 中大量匯入的無效資料形式,現在可能無法載入。不過,在舊版中,除非用戶端嘗試存取無效資料,否則不會發生作業失敗的情況。 新增的驗證會在大量載入之後查詢數據時,將意外降到最低。

大量匯出或匯入 SQLXML 文件

若要大量匯出或匯入 SQLXML 資料,請在格式檔案中使用下列其中一種資料類型。

資料類型 效果
SQLCHAR 或 SQLVARYCHAR 資料是使用用戶端字碼頁或定序所隱含的字碼頁所傳送。 效果與指定 -c 參數但不指定格式檔案相同。
SQLNCHAR 或 SQLNVARCHAR 以 Unicode 格式傳送這份資料。 效果與指定 -w 參數但不指定格式檔案相同。
SQLBINARY 或 SQLVARYBIN 未經任何轉換即傳送這份資料。

權限

bcpout 作業需要源數據表的 SELECT 許可權。

bcpin 作業只需要目標數據表的 SELECT/INSERT 許可權。 另外,如果符合下列中的任何狀況,便需要 ALTER TABLE 權限:

  • 存在有條件約束,而且未指定 CHECK_CONSTRAINTS 提示。

    注意

    停用條件約束是預設行為。 若要明確啟用條件約束,請搭配 CHECK_CONSTRAINTS 提示使用 -h 選項。

  • 存在有觸發程序,而且未指定 FIRE_TRIGGER 提示。

    注意

    依預設不會引發觸發程序。 若要明確引發觸發程序,請搭配 FIRE_TRIGGERS 提示使用 -h 選項。

  • 您利用 -E 選項,從資料檔案匯入識別值。

注意

SQL Server 2005 中要求目標數據表的 ALTER TABLE 許可權是新的。 如果使用者帳戶沒有目標資料表的 ALTER 資料表權限,這項新的需求可能會讓不會強制進行觸發程序和條件約束檢查的 bcp 指令碼失敗。

字元模式 (-c) 與原生模式 (-n) 最佳做法

本節具有字元模式 (-c) 與原生模式 (-n) 的建議事項。

  • (管理員/使用者) 盡可能使用原生格式 (-n) 來避免分隔符號問題。 使用 SQL Server 透過原生格式匯出和匯入。 如果資料將匯入非 SQL Server 資料庫,請使用 -c 或 -w 選項,從 SQL Server 匯出資料。

  • (管理員) 使用 BCP OUT 時確認資料。 例如,當您依序使用 BCP OUT、BCP IN 和 BCP OUT 時,請確認資料正確匯出,而且結束字元值並未當做某些資料值的一部分使用。 請考慮使用隨機十六進位值覆寫預設終止符(使用 -t 和 -r 選項),以避免終止符值和數據值之間的衝突。

  • (使用者) 使用長且唯一的結束字元 (任何位元組或字元序列),將實際字串值發生衝突的可能性降到最低。 這可透過使用 -t 和 -r 選項完成。

範例

本區段包含下列範例:

  • A. 將資料表資料列複製到資料檔案中 (使用信任連接)

  • B. 將資料表資料列複製到資料檔案中 (使用混合模式驗證)

  • C. 將檔案資料複製到資料表中

  • D. 將特定資料行複製到資料檔案中

  • E. 將特定資料列複製到資料檔案中

  • F. 將查詢的資料複製到資料檔案中

  • G. 建立非 XML 格式檔案

  • H. 建立 XML 格式檔案

  • I. 使用格式檔案以 bcp進行大量匯入

A. 將資料表資料列複製到資料檔案中 (使用信任連接)

下列範例說明 資料表上的 out AdventureWorks2012.Sales.Currency 選項。 此範例會建立名為 Currency.dat 的數據檔,並使用字元格式將數據表數據複製到其中。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

請在命令提示字元之下,輸入下列命令:

bcp AdventureWorks2012.Sales.Currency out Currency.dat -T -c  

B. 將資料表資料列複製到資料檔案中 (使用混合模式驗證)

下列範例說明 資料表上的 out AdventureWorks2012.Sales.Currency 選項。 此範例會建立名為 Currency.dat 的數據檔,並使用字元格式將數據表數據複製到其中。

此範例假設您使用的是混合模式驗證,您必須使用 -U 參數指定您的登入識別碼。 同時,除非您要連線至本機電腦上的 SQL Server 預設執行個體,否則請使用 -S 參數指定系統名稱,並選擇性地指定執行個體名稱。

bcp AdventureWorks2012.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>  

系統會提示您輸入密碼。

C. 將檔案資料複製到資料表中

下列範例說明 使用在上述範例中建立的 檔案 ,來說明 in 選項。Currency.dat 不過,首先,這個範例會建立數據表的 AdventureWorks2012 Sales.Currency 空白複本, Sales.Currency2其中會複製數據。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

若要建立空白數據表,請在 查詢編輯器 中輸入下列命令:

USE AdventureWorks2012;  
GO  
SELECT * INTO AdventureWorks2012.Sales.Currency2   
FROM AdventureWorks2012.Sales.Currency WHERE 1=2;  

若要將字元資料大量複製到新的資料表,也就是匯入數據,請在命令提示字元中輸入下列命令:

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -c  

若要確認命令成功,請在 查詢編輯器 中顯示資料表的內容,然後輸入:

USE AdventureWorks2012;  
GO  
SELECT * FROM Sales.Currency2  

D. 將特定資料行複製到資料檔案中

若要複製特定資料行,您可以使用 queryout 選項。 下列範例只會將 Name 資料表的 Sales.Currency 資料行複製到資料檔案中。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c  

E. 將特定資料列複製到資料檔案中

若要複製特定資料列,您可以使用 queryout 選項。 下列範例只會將數據表中名為 Jarrod Rana AdventureWorks2012.Person.Person 的聯繫人數據列複製到數據檔 (Jarrod Rana.dat)。此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp "SELECT * FROM AdventureWorks2012.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c  

F. 將查詢的資料複製到資料檔案中

若要將 Transact-SQL 陳述式的結果集複製到資料檔案中,請使用 queryout 選項。 下列範例會將數據表中的名稱 AdventureWorks2012.Person.Person ,依姓氏排序,然後依名字複製到數據檔中 Contacts.txt 。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp "SELECT FirstName, LastName FROM AdventureWorks2012.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T  

G. 建立非 XML 格式檔案

下列範例會為 AdventureWorks2012 資料庫中的數據表建立非 XML 格式檔案Currency.fmtSales.Currency 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp AdventureWorks2012.Sales.Currency format nul -T -c  -f Currency.fmt  

如需詳細資訊,請參閱非 XML 格式檔案 (SQL Server) 所支援的原始格式。

H. 建立 XML 格式檔案

下列範例會為 AdventureWorks2012 資料庫中的Sales.Currency數據表建立名為 Currency.xmlXML 格式檔案。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp AdventureWorks2012.Sales.Currency format nul -T -c -x -f Currency.xml  

注意

若要使用 -x 參數,您必須使用 bcp 9.0 用戶端。 如需如何使用 bcp 9.0 用戶端的詳細資訊,請參閱。

如需詳細資訊,請參閱 XML 格式檔案 (SQL Server)

I. 使用格式檔案以 bcp 進行大量匯入

若要在將資料匯入 SQL Server 的執行個體時使用先前所建立的格式檔案,請使用 -f 參數搭配 in 選項。 例如,下列命令會使用先前建立的格式檔案 ,將數據檔Currency.dat的內容大量複製到數據表複本 Sales.CurrencySales.Currency2Currency.xml)。 此範例假設您使用 Windows 驗證,且與執行 bcp 命令的伺服器實例有信任的連線。

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

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -f Currency.xml  

注意

當資料檔案欄位與資料表資料行不同 (如號碼、排序或資料類型) 時,格式檔案就非常有用。 如需詳細資訊,請參閱匯入或匯出資料的格式檔案 (SQL Server)

其他範例

下列主題包含使用 bcp 的範例:

另請參閱

準備大量匯出或匯入的資料 (SQL Server)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SET QUOTED_IDENTIFIER (Transact-SQL)
sp_configure (Transact-SQL)
sp_tableoption (Transact-SQL)
匯入或匯出資料的格式檔案 (SQL Server)