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- 明確指定資料庫名稱。

indata_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)。

擁有者
這是資料表或檢視表的擁有者名稱。 如果執行該作業的使用者擁有指定的資料表或檢視表,則可選擇是否要使用owner 。 如果未指定擁有者,且執行作業的使用者沒有擁有指定的資料表或檢視表,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)

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

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

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

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

-c
利用字元資料類型來執行作業。 此選項不會提示每個欄位;它會使用 char 作為儲存類型,不含前置詞,且 具有 \t (定位字元) 做為欄位分隔 符,\r\n (分行符號) 做為資料列結束字元。 -c-w 不相容。

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

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

注意

我們建議您在格式檔案中,最好針對每一個資料行各指定一個定序名稱。

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

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

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

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

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

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

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

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

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

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

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

    注意

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

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

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

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

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

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

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

KILOBYTES_PER_BATCH =cc
每一批資料的近似 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 現在會強制進行資料驗證與資料檢查,若針對資料檔案中無效的資料執行指令碼,這些資料驗證與檢查作業可能會導致指令碼失敗。

注意

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

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

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

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

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

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

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

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

-mmax_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

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

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

-Sserver_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 ,才能順利登入。

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

重要

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

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

-V (80 | 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 現在會驗證:

  • floatreal 資料類型的原生表示法是否有效。

  • 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. 將檔案資料複製到資料表中

下列範例會利用先前範例 (Currency.dat) 中所建立的檔案,說明 in 選項。 不過,這個範例會先建立空的 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 選項。 下列範例只會將 AdventureWorks2012.Person.Person 資料表中名為 Jarrod Rana 之連絡人的資料列,複製到資料檔案 (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資料庫中的 Sales.Currency 資料表建立非 XML 格式檔案 Currency.fmt 。 這個範例假設您使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

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

H. 建立 XML 格式檔案

下列範例會為AdventureWorks2012資料庫中的 Sales.Currency 資料表建立名為 Currency.xml 的 XML 格式檔案。 這個範例假設您使用 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.Currency 資料檔案的內容大量複製到 Sales.Currency2 資料表的複本 (Currency.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)