BCP 命令


bcp 實用工具

    我們可以通過如下BCP命令(注意不能有回車)將其導出為XML文件,並保存:

BCP "SELECT TOP 30 [bom_no],[LEVEL] FROM [sqladmin].[dbo].[bom] FOR XML path,TYPE, ELEMENTS ,ROOT('RegionSales')" QUERYOUT "d:\temp\test.XML" -c -t -T -S localhost

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 連接到用戶的默認數據庫。 如果指定了 -ddatabase_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

指定格式化文件的完整路徑。 此選項的含義取決於使用它的環境,具體如下:

如果 -f 與 format 選項一起使用,則將為指定的表或視圖創建指定的 format_file。 若要創建 XML 格式化文件,請同時指定 -x 選項。 有關詳細信息,請參閱創建格式化文件 (SQL Server)

如果與 in 或 out 選項一起使用,則 -f 需要一個現有的格式化文件。

注意

與 in 或 out 選項一起使用時,格式化文件是可選的。 如果沒有 -f 選項,則在未指定 -n、-c、-w 或 -N 時,該命令將提示輸入格式信息,並允許您將響應保存在格式化文件(默認文件名為 Bcp.fmt)中。

如果 format_file 以連字符 (-) 或正斜杠 (/) 開頭,則不要在 -f 與 format_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 = cc

每批數據以千字節計算的近似值(即 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,將不運行任何插入觸發器。 對於 out、queryout 和 format 參數,將忽略 FIRE_TRIGGERS。

-i input_file

指定響應文件的名稱,其中包含在交互模式(未指定 -n、-c、-w 或 -N)下執行大容量復制時,對該命令要求輸入每個數據字段的提示信息所作出的響應。

如果 input_file 以連字符 (-) 或正斜杠 (/) 開頭,則不要在 -i 與 input_file 值之間包含空格。

-k

指定在操作過程中空列應該保留 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

指定登錄 ID 的密碼。 如果未使用此選項,bcp 命令將提示輸入密碼。 如果在命令提示符的末尾使用此選項,但不提供密碼,則 bcp 將使用默認密碼 (NULL)。

安全說明

不要使用空密碼。請使用強密碼。

若要屏蔽密碼,請不要同時指定 -P 和 -U 選項。 而應在指定 bcp 以及 -U 選項和其他開關(不指定 -P)之后按 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 的登錄 ID。

安全說明

如果 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 和 -fformat_file 選項一起使用,可以生成基於 XML 的格式化文件,而不是默認的非 XML 格式化文件。 在導入或導出數據時,-x 不起作用。 如果不與 format 和 -fformat_file 一起使用,則將生成錯誤。

注釋


當安裝 Microsoft SQL Server 2012 工具時,將安裝 bcp 11.0 客戶端。 如果同時安裝了 SQL Server 2012 和早期版本 SQL Server 的工具,您所使用的可能是早期版本的 bcp 客戶端,而不是 bcp 11.0 客戶端,具體情況取決於 PATH 環境變量的值。 此環境變量定義 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 兼容的本機數據文件。

計算列和 timestamp 列

為計算列或 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 現在可以驗證:

float 或 real 數據類型的本機表示形式是否有效。

Unicode 數據的字節數是否為偶數。

可以在早期版本的 SQL Server 中大容量導入的無效數據類型現在可能無法加載。在早期版本中,僅當客戶端嘗試訪問無效數據時才出現失敗。 在大容量加載后查詢數據時,添加的驗證可最大限度地減少警告。

大容量導出或導入 SQLXML 文檔

若要大容量導出或導入 SQLXML 數據,請在格式化文件中使用下列數據類型之一。

數據類型

效果

SQLCHAR 或 SQLVARYCHAR

在客戶端代碼頁或排序規則隱含的代碼頁中發送數據。 與在不指定格式化文件的情況下指定 -c 開關具有相同的效果。

SQLNCHAR 或 SQLNVARCHAR

以 Unicode 格式發送數據。 與在不指定格式化文件的情況下指定 -w 開關具有相同的效果。

SQLBINARY 或 SQLVARYBIN

不經任何轉換即發送數據。

權限


bcpout 操作要求對源表有 SELECT 權限。

bcpin 操作要求至少對目標表有 SELECT/INSERT 權限。 此外,如果下列任一條件成立,則要求擁有 ALTER TABLE 權限:

存在約束,但沒有指定 CHECK_CONSTRAINTS 提示。

注意

禁用約束是默認行為。 若要顯式啟用約束,請使用 -h 選項和 CHECK_CONSTRAINTS 提示。

存在觸發器,但沒有指定 FIRE_TRIGGER 提示。

注意

默認情況下,不激發觸發器。 若要顯式激發觸發器,請使用 -h 選項和 FIRE_TRIGGERS 提示。

可以使用 -E 選項從數據文件導入標識值。

注意

要求對目標表具有 ALTER TABLE 權限是 SQL Server 2005 的新要求。 如果用戶帳戶不具有對目標表的 ALTER TABLE 權限,這項新要求有可能導致不強制使用觸發器和約束檢查的 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 開關指定登錄 ID。 並且,除非您連接到本地計算機上 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 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 選項。 下面的示例僅將名為 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 數據庫中的 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.xml),將數據文件 Currency.dat 的內容大容量復制到 Sales.Currency 表的副本 (Sales.Currency2) 中。 該示例假定您使用 Windows 身份驗證,並且與運行 bcp 命令所針對的服務器實例之間具有可信連接。

在 Windows 命令提示符下,輸入以下內容:

復制

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

注意

如果數據文件字段和表中的列不同(例如,在編號、排序或數據類型方面),則可使用格式化文件。 有關詳細信息,請參閱用來導入或導出數據的格式化文件 (SQL Server)

其他示例


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

創建格式化文件 (SQL Server)

大容量導入和導出 XML 文檔的示例 (SQL Server)

大容量導入數據時保留標識值 (SQL Server)

在大容量導入期間保留空值或使用默認值 (SQL Server)

指定字段終止符和行終止符 (SQL Server)

使用格式化文件大容量導入數據 (SQL Server)

使用字符格式導入或導出數據 (SQL Server)

使用本機格式導入或導出數據 (SQL Server)

使用 Unicode 字符格式導入或導出數據 (SQL Server)

使用 Unicode 本機格式導入或導出數據 (SQL Server)

請參閱


參考

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

SET QUOTED_IDENTIFIER (Transact-SQL)

sp_configure (Transact-SQL)

sp_tableoption (Transact-SQL)

概念

准備用於大容量導出或導入的數據 (SQL Server)

用來導入或導出數據的格式化文件 (SQL Server)

其他資源

Parallel Data Loads


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM