bcp 公用程式

更新: 2006 年 12 月 12 日

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

主題連結圖示有關 bcp 語法慣例的部分,請參閱<命令提示字元公用程式>。

語法

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-Sserver_name[\instance_name]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

引數

  • database_name
    這是指定的資料表或檢視所在的資料庫名稱。若未指定,這就是使用者的預設資料庫。
  • owner
    為資料表或檢視的擁有者名稱。如果執行作業的使用者擁有指定的資料表或檢視,則 owner是選擇性的。如果未指定 owner,且執行作業的使用者並未擁有指定的資料表或檢視,則 SQL Server 2005 會傳回錯誤訊息,並取消作業。
  • table_name
    這是將資料匯入 SQL Server (in) 時的目的地資料表名稱,以及從 SQL Server (out) 匯出資料時的來源資料表名稱。
  • view_name
    這是將資料複製到 SQL Server (in) 時的目的地檢視名稱,以及從 SQL Server (out) 中複製資料時的來源檢視名稱。只有所有資料行都指向相同資料表的檢視,可用來作為目的地檢視。如需有關將資料複製到檢視之限制的詳細資訊,請參閱<INSERT (Transact-SQL)>。
  • "query"
    這是一個傳回結果集的 Transact-SQL 查詢。如果查詢傳回多個結果集,例如,指定了 COMPUTE 子句的 SELECT 陳述式,便只會將第一個結果集複製到資料檔中,且會忽略後續的結果集。請利用雙引號括住查詢,利用單引號括住內嵌在查詢中的任何項目。當從查詢中大量複製資料時,也必須指定 queryout
  • in | out | queryout | format
    請依照下列方式來指定大量複製的方向:

    • in 會從檔案中複製到資料庫資料表或檢視。
      ms162802.note(zh-tw,SQL.90).gif附註:
      SQL Server 6.5 所包含的 bcp 公用程式,不支援在包含 sql_variantbigint 資料類型的資料表中進行大量複製。
    • out 會從資料庫資料表或檢視中複製到檔案。擷取資料時,請注意 bcp 公用程式會以 Null 代表空白字串,並以空白字串代表 Null 字串。
    • queryout 會從查詢中複製資料,且只有在從查詢中大量複製資料時,才能指定它。
    • format 會根據指定的選項 (-n-c-w-6-N) 和資料表或檢視分隔符號來建立格式檔。當大量複製資料時,bcp 命令可以參考格式檔,您不需要以互動方式來重新輸入格式資訊。format 選項需要 -f 選項;建立 XML 格式檔也需要 -x 選項。如需詳細資訊,請參閱<建立格式檔案>。
  • data_file
    這是資料檔的完整路徑。當資料大量匯入 SQL Server 時,資料檔會包含要複製到指定資料表或檢視的資料。當從 SQL Server 大量匯出資料時,資料檔會包含從資料表或檢視複製的資料。路徑可以有 1 至 255 個字元。資料檔可以包含最多 2,147,483,647 個資料列。

    ms162802.note(zh-tw,SQL.90).gif重要事項:
    若為 format 選項,您必須指定 nul 作為 data_file (formatnul 的值)。
  • -mmax_errors
    指定最多發生多少語法錯誤之後,便取消 bcp 作業。語法錯誤隱含對於目的地資料類型的資料轉換錯誤。max_errors 總計將只能在伺服器偵測的錯誤排除在外,例如條件約束違規。

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

    ms162802.note(zh-tw,SQL.90).gif附註:
    -m 選項也不適用於轉換 moneybigint 資料類型。
  • -fformat_file
    指定格式檔的完整路徑。這個選項的意義會依照下列方式,隨著使用它的環境而不同:

    • 如果 -fformat 選項一起使用,會對指定的資料表或檢視建立所指定的 format_file。若要建立 XML 格式檔,另外,也請指定 -x 選項。如需詳細資訊,請參閱<建立格式檔案>。
    • 當搭配 inout 選項一起使用時,-f 需要一個現有的格式檔。
      ms162802.note(zh-tw,SQL.90).gif附註:
      當使用格式檔時,inout 選項是選擇性的。當沒有 -f 選項時,如果未指定 -n-c-w-6-N,命令會提示您輸入格式資訊,且可讓您將回應儲存在格式檔中 (預設檔案名稱是 Bcp.fmt)。
  • -x
    format-fformat_file 選項一起使用,會產生以 XML 為基礎的格式檔案,而不是預設的非 XML 格式檔案。當匯入或匯出資料時,-x 無法運作。如果沒有與 format-fformat_file 一起使用,它會產生錯誤。

    ms162802.note(zh-tw,SQL.90).gif附註:
    若要使用 -x 參數,您必須使用 bcp 9.0 用戶端。如需有關如何使用 bcp 9.0 用戶端的詳細資訊,請參閱本主題稍後的<備註>一節。
  • -eerr_file
    指定用來儲存錯誤檔的完整路徑,這個錯誤檔用來儲存 bcp 公用程式無法從檔案傳送至資料庫的任何資料列。bcp 命令所產生的錯誤訊息會送往使用者的工作站。如果未使用這個選項,就不會建立錯誤檔。
  • -Ffirst_row
    指定要從資料表匯出或從資料檔匯入的第一個資料列的號碼。這個參數需要大於 (>) 0、小於 (<) 或等於 (=) 總列數的值。如果沒有這個參數,預設值是檔案中的第一個資料列。
  • -Llast_row
    指定要從資料表匯出或從資料檔匯入的最後一個資料列的號碼。這個參數需要大於 (>) 0、小於 (<) 或等於 (=) 最後一個資料列號碼的值。如果沒有這個參數,預設值是檔案中的最後一個資料列。
  • -bbatch_size
    指定每一批匯入資料的資料列數。每一批次是以個別交易匯入及記錄,是在認可之前匯入整個批次。依預設,資料檔中的所有資料列是以一個批次匯入。若要在多個批次之間分散資料列,請指定小於資料檔之資料列數的 batch_size。如果有任何批次的交易失敗,只回復目前批次的插入項。以後的失敗不會影響已認可的交易所匯入的批次。

    請勿同時使用此選項與 **h"**ROWS_PER_BATCH =bb" 選項。

    如需詳細資訊,請參閱<管理大量匯入的批次>。

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

    如需詳細資訊,請參閱<使用原生格式匯入或匯出資料>。

  • -c
    利用字元資料類型來執行作業。不是每個欄位都有這個選項的提示;它會使用 char 作為儲存類型,沒有前置詞,欄位分隔字元是 \t (定位字元),資料列結束字元是 \r\n (換行字元)。

    如需詳細資訊,請參閱<使用字元格式匯入或匯出資料>。

  • -N
    如果是非字元資料,便利用資料的原生 (資料庫) 資料類型來執行大量複製作業;如果是字元資料,便利用 Unicode 字元來執行大量複製作業。這個選項是 -w 選項的高效能替代項目,它的用途是利用資料檔,在 SQL Server 的執行個體之間傳送資料。不是每個欄位都有這項提示。當您要傳送的資料包含 ANSI 擴充字元且需要原生模式的效能時,請使用這個選項。SQL Server 6.5 或更早的版本不能使用 -N

    如需詳細資訊,請參閱<使用 Unicode 原生格式匯入或匯出資料>。

  • -w
    利用 Unicode 字元來執行大量複製作業。不是每個欄位都有這個選項的提示;它會使用 nchar 作為儲存類型,沒有前置詞,欄位分隔字元是 \t (定位字元),資料列結束字元是 \n (新行字元)。SQL Server 6.5 或更早的版本不能使用這個選項。

    如需詳細資訊,請參閱<使用 Unicode 字元格式匯入或匯出資料>。

  • -V ( 60| 65| 70| 80)
    利用舊版 SQL Server 的資料類型來執行大量複製作業。不是每個欄位都有這個選項的提示;它會使用預設值。例如,若要將 SQL Server 6.5 提供的 bcp 公用程式所支援 (但 ODBC 已不支援) 的日期格式大量複製到 SQL Server 2005 中,請使用 -V65 參數。

    ms162802.note(zh-tw,SQL.90).gif重要事項:
    當從 SQL Server 中,將資料大量匯出至資料檔中,即使指定了 -Vbcp 公用程式也不會產生任何 datetimesmalldatetime 資料的 SQL Server 6.0 或 SQL Server 6.5 日期格式。日期一律以 ODBC 格式寫入。另外,位元資料行中的 Null 值會寫成 0 值,因為 SQL Server 6.5 和更早的版本不支援可為 Null 的 bit 資料。

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

  • -6
    利用 SQL Server 6.0 或 SQL Server 6.5 資料類型來執行大量複製作業。支援這個選項,只是為了與舊版相容。在 SQL Server 7 和更新的版本中,請改用 -V 選項。
  • -q
    bcp 公用程式和 SQL Server 執行個體之間的連接中,執行 SET QUOTED_IDENTIFIERS ON 陳述式。請利用這個選項來指定包含空格或單引號的資料庫、擁有者、資料表或檢視名稱。請用引號 ("") 括住整個三部分資料表或檢視名稱。

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

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

  • -C { ACP | OEM | RAW | code_page }
    為了與舊版的 SQL Server 相容而支援這個項目。如果是 SQL Server 7.0 和更新的版本,Microsoft 建議您在格式檔中,每個資料行各指定一個定序名稱。

    指定資料檔中的資料的字碼頁。唯有當資料包含的 charvarchartext 資料行有大於 127 或小於 32 的字元值時,code_page 才會相關。

    字碼頁值 描述

    ACP

    ANSI/MicrosoftWindows (ISO 1252)。

    OEM

    用戶端所用的預設字碼頁。如果未指定 -C 的話,這是預設字碼頁。

    RAW

    不進行字碼頁之間的轉換。這是最快的選項,因為不進行轉換。

    code_page

    特定字碼頁編號;如 850。

    如需詳細資訊,請參閱<在不同的定序間複製資料>。

  • -tfield_term
    指定欄位結束字元。預設值是 \t (定位字元)。請利用這個參數來覆寫預設的欄位結束字元。如需詳細資訊,請參閱<指定欄位和資料列結束字元>。
  • -rrow_term
    指定資料列結束字元。預設值是 \n (新行字元)。請利用這個參數來覆寫預設的資料列結束字元。如需詳細資訊,請參閱<指定欄位和資料列結束字元>。
  • -iinput_file
    指定回應檔的名稱,回應檔包含利用互動模式 (未指定 -n-c-w-6-N) 來執行大量複製時,在命令提示字元之下,對於每個資料欄位之問題的回應。
  • -ooutput_file
    指定接收在命令提示字元之下重新導向的輸出之檔案名稱。
  • -apacket_size
    指定伺服器所收送的每個網路封包的位元組數。伺服器組態選項可以利用 SQL Server Management Studio (或 sp_configure 系統預存程序) 來設定。不過,可使用這個選項,個別地覆寫伺服器組態選項。packet_size 可以從 4096 到 65535 位元組;預設值是 4096。

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

  • -Sserver_name[ **\instance_name]
    指定要連接的 SQL Server 執行個體。如果未指定任何伺服器,bcp 公用程式會連接本機電腦中的 SQL Server 預設執行個體。當從網路中的遠端電腦或本機具名執行個體執行 bcp 命令時,需要這個選項。若要連接到伺服器上的 SQL Server 預設執行個體,只要指定 server_name。若要連接到 SQL Server 2005 的具名執行個體,請指定 server_name
    \**instance_name
  • -Ulogin_id
    指定用來連接 SQL Server 的登入識別碼。

    ms162802.security(zh-tw,SQL.90).gif安全性注意事項:
    指定 bcp 公用程式使用整合式安全性的信任連接,連接到 SQL Server 時,請使用 -T 選項 (信任連接),而非 user namepassword 的結合。
  • -Ppassword
    指定登入識別碼的密碼。如果未使用這個選項,bcp 命令會提示您輸入密碼。如果在未使用密碼的情況下,命令提示字元之下的尾端使用這個選項,bcp 會使用預設密碼 (NULL)。

    ms162802.security(zh-tw,SQL.90).gif安全性注意事項:
    密碼不能空白。請使用增強式密碼。

    若要遮罩您的密碼,請勿搭配 -U 選項來指定 -P 選項。相反地,請在搭配 -U 選項及其他參數 (不可指定 -P) 來指定 bcp 之後,按 ENTER 鍵,此時命令會提示您輸入密碼。這個方法可確保在輸入密碼時,遮罩您的密碼。

  • -T
    指定 bcp 公用程式使用整合式安全性的信任連接,連接到 SQL Server。網路使用者的安全性認證、login_idpassword 不是必要的。如果未指定 –T,您就必須指定 –U–P,才能順利登入。
  • -v
    報告 bcp 公用程式版本號碼和著作權。
  • -R
    指定利用定義給用戶端電腦地區設定的區域格式,將貨幣、日期和時間資料大量複製到 SQL Server 中。依預設,會忽略地區設定。
  • -E
    指定識別資料行要使用匯入之資料檔中的一或多個識別值。如果未提供 -E,就會忽略匯入的資料檔中這個資料行的識別值,SQL Server 2005 會根據建立資料表期間所指定的種子值和遞增值來自動指派唯一值。

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

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

    如需有關保留識別值的詳細資訊,請參閱<大量匯入資料時保留識別值>。

  • **-h"**hint[ ,... n] "
    指定將資料大量匯入資料表或檢視期間,所要使用的一或多個提示。將資料大量複製到 SQL Server 6.x 或更早的版本時,不能使用這個選項。

    • ORDER**(column[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 條件約束,在作業之後,會將資料表的條件約束標記為不受信任。

      ms162802.note(zh-tw,SQL.90).gif附註:
      一律強制實施 UNIQUE、PRIMARY KEY 和 NOT NULL 條件約束。

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

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

      ms162802.note(zh-tw,SQL.90).gif附註:
      在 SQL Server 2005 中,bcp 會強制進行新的資料驗證和資料檢查,當現有的指令碼處理資料檔中的無效資料時,作業可能會失敗。
      ms162802.note(zh-tw,SQL.90).gif附註:
      -mmax_errors 參數不適用於條件約束檢查。

      如需詳細資訊,請參閱<控制大量匯入作業的條件約束檢查>。

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

      如需詳細資訊,請參閱<在大量匯入資料時,控制觸發程序的執行>。

備註

當您在系統上安裝 Microsoft SQL Server 工具的同時,也會安裝 bcp 9.0 用戶端。如果同時安裝 SQL Server 2005 和 SQL Server 2000 工具,根據 PATH 環境變數的值而定,您也可以使用舊版的 bcp 用戶端來取代 bcp 9.0 用戶端。這個環境變數定義了 Windows 用來搜尋可執行檔的一組目錄。若要確定您所使用的版本,請在 Windows 命令提示字元中執行 bcp/v 命令。如需有關如何在 PATH 環境變數中設定命令路徑的詳細資訊,請參閱 Windows 說明。

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

如需有關 bcp 公用程式的尋找位置與執行方式,以及命令提示字元公用程式語法慣例的詳細資訊,請參閱<命令提示字元公用程式>。

如果有關準備大量匯入或匯出作業的資訊,請參閱<準備大量匯出或匯入的資料>。

如需有關大量匯入所執行的資料列插入作業何時才會記錄至交易記錄中的詳細資訊,請參閱<大量匯入採用最低限度記錄的必要條件>。

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

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

計算資料行和 timestamp 資料行會照常從 SQL Server 大量複製到資料檔中。

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

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

  • 當您在命令提示字元之下,指定包含空格或引號的識別碼或檔案名稱時,請用引號 ("") 括住識別碼。
    例如,下列 bcp out 命令會建立名稱為 Currency Types.dat 的資料檔:

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

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

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

資料驗證

在 SQL Server 2005 中,bcp 會強制進行新的資料驗證和資料檢查,當現有的指令碼處理資料檔中的無效資料時,作業可能會失敗。例如,bcp 現在會驗證:

  • floatreal 資料類型的原生表示法是否有效。
  • Unicode 資料的長度是否為偶數位元組。

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

大量匯出或匯入 SQLXML 文件

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

資料類型 作用

SQLCHAR 或 SQLVARYCHAR

資料是在用戶端字碼頁或定序所隱含的字碼頁中傳送。其效果與指定 -c 參數而不指定格式檔案是相同的。

SQLNCHAR 或 SQLNVARCHAR

以 Unicode 格式傳送這份資料。其效果與指定 -w 參數而不指定格式檔案是相同的。

SQLBINARY 或 SQLVARYBIN

未經任何轉換即傳送這份資料。

權限

bcp out 作業需要來源資料表的 SELECT 權限。

bcp in 作業至少需要目標資料表的 SELECT/INSERT 權限。另外,如果符合下列中的任何狀況,便需要 ALTER TABLE 權限:

  • 存在有條件約束,而且未指定 CHECK_CONSTRAINTS 提示。
    ms162802.note(zh-tw,SQL.90).gif附註:
    停用條件約束是預設行為。若要明確啟用條件約束,請搭配 CHECK_CONSTRAINTS 提示來使用 -h 選項。
  • 存在有觸發程序,而且未指定 FIRE_TRIGGER 提示。
    ms162802.note(zh-tw,SQL.90).gif附註:
    依預設不會引發觸發程序。若要明確引發觸發程序,請搭配 FIRE_TRIGGERS 提示來使用 -h 選項。
  • 您利用 -E 選項,從資料檔中匯入識別值。
ms162802.note(zh-tw,SQL.90).gif附註:
在 SQL Server 2005 中,目標資料表的 ALTER TABLE 權限是一項新的需求。如果使用者帳戶沒有目標資料表的 ALTER 資料表權限,這項新的需求可能使不強制實施觸發程序和條件約束檢查的 bcp 指令碼失敗。

範例

此章節包含下列範例:

  • A. 將資料表資料列複製到資料檔中 (使用信任連接)
  • B. 將資料表資料列複製到資料檔中 (使用混合模式驗證)
  • C. 將檔案資料複製到資料表中
  • D. 將特定資料行複製到資料檔中
  • E. 將特定資料列複製到資料檔中
  • F. 將查詢的資料複製到資料檔中
  • G. 建立非 XML 格式檔案
  • H. 建立 XML 格式檔案
  • I. 使用格式檔案以 bcp 進行大量匯入

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

下列範例說明 AdventureWorks.Sales.Currency 資料表的 out 選項。這個範例會建立一個名稱為 Currency.dat 的資料檔,且會利用字元格式,將資料表的資料複製到這個資料檔中。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

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

下列範例說明 AdventureWorks.Sales.Currency 資料表的 out 選項。這個範例會建立一個名稱為 Currency.dat 的資料檔,且會利用字元格式,將資料表的資料複製到這個資料檔中。

此範例假設您使用混合模式驗證,因此您必須利用 -U 參數指定您的登入識別碼。另外,除非您連接到本機電腦中的 SQL Server 預設執行個體,否則請利用 -S 參數指定系統名稱以及執行個體名稱 (選擇性)。

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

系統會提示您輸入密碼。

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

下列範例會利用先前的範例 (Currency.dat) 所建立的檔案來說明 in 選項。不過,這個範例會先建立空的 AdventureWorks Sales.Currency 資料表副本 Sales.Currency2,以便將資料複製到這個副本中。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

若要在查詢編輯器中建立空的資料表,請輸入下列命令:

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

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

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

若要確認命令已順利完成,請在查詢編輯器中顯示資料表的內容,再輸入:

USE AdventureWorks;
GO
SELECT * FROM Sales.Currency2

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

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

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

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

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

若要複製特定資料列,您可以使用 queryout 選項。下列範例只會將 AdventureWorks.Person.Contact 資料表中名稱為 Jarrod Rana 之連絡人的資料列複製到資料檔 (Jarrod Rana.dat) 中。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

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

若要將 Transact-SQL 陳述式的結果集複製到資料檔中,請使用 queryout 選項。下列範例會依照先姓氏後名字的方式,將 AdventureWorks.Person.Contact 資料表中的名稱複製到 Contacts.txt 資料檔中。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

G. 建立非 XML 格式檔案

下列範例會針對 AdventureWorks 資料庫中的 Sales.Currency 資料表,建立 XML 格式檔案 Currency.fmt。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

如需詳細資訊,請參閱<瞭解非 XML 格式檔案>。

H. 建立 XML 格式檔案

下列範例會針對 AdventureWorks 資料庫中的 Sales.Currency 資料表來建立名稱為 Currency.xml 的 XML 格式檔。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

bcp AdventureWorks.Sales.Currency format nul -T -c -x -f Currency.xml
ms162802.note(zh-tw,SQL.90).gif附註:
若要使用 -x 參數,您必須使用 bcp 9.0 用戶端。如需有關如何使用 bcp 9.0 用戶端的詳細資訊,請參閱<備註>一節。

如需詳細資訊,請參閱<了解 XML 格式檔案>。

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

如果將資料匯入 SQL Server 執行個體時,要使用先前建立的格式檔,請搭配 in 選項來使用 -f 參數。例如,下列命令會利用先前建立的格式檔案 (Currency.xml),將 Currency.dat 資料檔的內容大量複製到 Sales.Currency 資料表的副本 (Sales.Currency2) 中。這個範例假設您在使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
ms162802.note(zh-tw,SQL.90).gif附註:
當資料檔欄位與資料表資料行不同 (如號碼、排序或資料類型) 時,格式檔案就非常有用。如需詳細資訊,請參閱<用於匯入或匯出資料的格式檔案>。

其他範例

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

請參閱

其他資源

準備大量匯出或匯入的資料
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
使用資料表層級鎖定平行匯入資料
SET QUOTED_IDENTIFIER (Transact-SQL)
sp_configure (Transact-SQL)
sp_tableoption (Transact-SQL)
用於匯入或匯出資料的資料格式
用於匯入或匯出資料的格式檔案
最佳化大量匯入效能
關於大量匯入和大量匯出作業
大量匯入及匯出資料的實例

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

變更的內容
  • 更正 CHECK_CONSTRAINTS 的說明,指出這個提示會導致忽略 CHECK 和 FOREIGN KEY 條件約束。

2006 年 7 月 17 日

新增內容:
  • 更新 ORDER 引數的描述。
  • 新增指向包含 bcp 範例之主題的「其他範例」連結。

2006 年 4 月 14 日

變更的內容:
  • 更新 CHECK_CONSTRAINTS 描述中的註解,從強制使用的條件約束清單中移除 FOREIGN KEY 條件約束。
  • 更新 ALTER TABLE 權限的需求。