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" {in data_file | out data_file | queryout data_file | format nul}

   [-a packet_size]
   [-b batch_size]
   [-c]
   [-C { ACP | OEM | RAW | code_page } ]
   [-d database_name]
   [-e err_file]
   [-E]
   [-f format_file]
   [-F first_row]
   [-h"hint [,...n]"] 
   [-i input_file]
   [-k]
   [-K application_intent]
   [-L last_row]
   [-m max_errors]
   [-n]
   [-N]
   [-o output_file]
   [-P password]
   [-q]
   [-r row_term]
   [-R]
   [-S [server_name[\instance_name]]
   [-t field_term]
   [-T]
   [-U login_id]
   [-v]
   [-V (80 | 90 | 100 )]
   [-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)。

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

  • -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 (定位字元),且資料列結束字元是 \r\n (換行字元)。 -c 與 -w 不相容。

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

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

    [!附註]

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

    字碼頁值

    說明

    ACP

    ANSI/Microsoft Windows (ISO 1252)。

    OEM

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

    RAW

    不會將字碼頁轉換成另一種字碼頁。 這是最快的選項,因為不進行轉換。

    code_page

    特定字碼頁編號;如 850。

    重要事項重要事項

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

  • -d database_name
    指定要連接的資料庫。 根據預設,bcp.exe 會連接到使用者的預設資料庫。 如果指定了 -d database_name 和三部分名稱 (database_name.schema.table,當做第一個參數傳遞給 bcp.exe),就會發生錯誤,因為資料庫名稱不能指定兩次。如果 database_name 的開頭是連字號 (-) 或斜線 (/),請勿在 -d 與資料庫名稱之間加上空格。

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

    如果 err_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -e 與 err_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 的開頭是連字號 (-) 或斜線 (/),請勿在 -f 與 format_file 值之間加上空格。

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

    first_row 可以是值高達 2^63-1 的正整數。 -F first_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 **=**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 現在會強制進行資料驗證與資料檢查,若針對資料檔中無效的資料執行指令碼,這些資料驗證與檢查作業可能會導致指令碼失敗。

      [!附註]

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

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

  • -i input_file
    指定回應檔的名稱,回應檔包含利用互動模式 (未指定 -n-c-w-N) 執行大量複製時,在命令提示字元處對於每個資料欄位之問題的回應。

    如果 input_file 的開頭是連字號 (-) 或斜線 (/),請勿在 -i 與 input_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 選項也不適用於轉換 money 或 bigint 資料類型。

  • -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 的開頭是連字號 (-) 或斜線 (/),請勿在 -o 與 output_file 值之間加上空格。

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

    安全性注意事項安全性注意事項

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

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

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

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

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

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

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

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

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

    如果 row_term 的開頭是連字號 (-) 或斜線 (/),請勿在 -r 與 row_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。

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

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

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

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

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

    安全性注意事項安全性注意事項

    指定 bcp 公用程式要使用整合式安全性的信任連接,連接到 SQL Server 時,請使用 -T 選項 (信任連接),而非 user name 和 password 的組合。

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

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

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008 和 SQL Server 2008 R2

    例如,若要產生 SQL Server 2000 不支援但在新版 SQL Server 中所引入的資料類型,請使用 -V80 選項。

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

  • -w
    利用 Unicode 字元執行大量複製作業。 並非每個欄位都有這個選項的提示。它會使用 nchar 做為儲存類型 (沒有前置詞)、欄位分隔字元是 \t (定位字元),而且資料列結束字元是 \n (換行字元)。 -w 與 -c 不相容。

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

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

備註

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

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

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

如需有關準備大量匯入或匯出作業的詳細資訊,請參閱<準備大量匯出或匯入的資料 (SQL Server)>。

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

原生資料檔案支援

在 SQL Server 2012 中,bcp 公用程式只支援與 SQL Server 2000、SQL Server 2005、SQL Server 2008和 SQL Server 2008 R2 相容的原生資料檔案。

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

SQL Server 會忽略針對計算資料行或 timestamp 資料行匯入之資料檔中的值,並自動指派值。 如果資料檔不包含資料表中計算資料行或 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 現在會驗證:

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

  • 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 提示。

    [!附註]

    停用條件約束是預設行為。 若要明確啟用條件約束,請搭配 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.將資料表資料列複製到資料檔中 (使用信任連接)

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

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

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

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

下列範例說明 AdventureWorks2012.Sales.Currency 資料表上的 out 選項。 這個範例會建立一個名稱為 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 選項。 下列範例只會將 Sales.Currency 資料表的 Name 資料行複製到資料檔中。 這個範例假設您使用 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 的執行個體時使用先前所建立的格式檔案,使用 in 選項時請指定 -f 參數。 例如,下列命令會利用先前建立的格式檔案 (Currency.xml),將 Currency.dat 資料檔的內容大量複製到 Sales.Currency 資料表的複本 (Sales.Currency2) 中。 這個範例假設您使用 Windows 驗證,且有信任連接通往您在執行 bcp 命令的伺服器執行個體。

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

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

[!附註]

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

其他範例

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

請參閱

參考

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

SET QUOTED_IDENTIFIER (Transact-SQL)

sp_configure (Transact-SQL)

sp_tableoption (Transact-SQL)

概念

準備大量匯出或匯入的資料 (SQL Server)

匯入或匯出資料的格式檔案 (SQL Server)