reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
exec master..xp_cmdshell 'bcp database.table out D:\xbb\table.txt -t ",,,,," -c -C65001 -T -S'
bcp {[[database_name.][schema].]{table_name | view_name} | "query"} {in | out | queryout | format} data_file [-m max_errors] [-f format_file] [-x] [-e err_file] [-F first_row] [-L last_row] [-b batch_size] [-d database_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )] [-q] [-C { ACP | OEM | RAW | code_page } ] [-t field_term] [-r row_term] [-i input_file] [-o output_file] [-a packet_size] [-S [server_name[/instance_name]]] [-U login_id] [-P password] [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]
- database_name
指定的表或視圖所在數據庫的名稱。如果未指定,則使用用戶的默認數據庫。
也可以使用 -d 顯式指定數據庫名稱。
- owner
表或視圖所有者的名稱。如果執行該操作的用戶擁有指定的表或視圖,則 owner 是可選的。如果未指定 owner,並且執行該操作的用戶不是指定的表或視圖的所有者,則 SQL Server 將返回錯誤消息,而且該操作將取消。
- 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。
只要在執行 bcp 語句之前存儲過程內引用的所有表均存在,查詢就可以引用該存儲過程。例如,如果存儲過程生成一個臨時表,則 bcp 語句便會失敗,因爲該臨時表只在運行時可用,而在語句執行時不可用。在這種情況下,應考慮將存儲過程的結果插入表中,然後使用 bcp 將數據從表複製到數據文件中。
- in | out| queryout | format
指定大容量複製的方向,具體如下:
in 從文件複製到數據庫表或視圖。
out 從數據庫表或視圖複製到文件。如果指定了現有文件,則該文件將被覆蓋。提取數據時,請注意 bcp 實用工具將空字符串表示爲 null,而將 null 字符串表示爲空字符串。
queryout 從查詢中複製,僅當從查詢大容量複製數據時才必須指定此選項。
format 根據指定的選項(-n、-c、-w 或 -N)以及表或視圖的分隔符創建格式化文件。大容量複製數據時,bcp 命令可以引用一個格式化文件,從而避免以交互方式重複輸入格式信息。format 選項要求指定 -f 選項;創建 XML 格式化文件時還需要指定 -x 選項。有關詳細信息,請參閱創建格式化文件。
- data_file
數據文件的完整路徑。將數據大容量導入 SQL Server 時,數據文件將包含要複製到指定的表或視圖中的數據。從 SQL Server 中大容量導出數據時,數據文件將包含從表或視圖中複製的數據。路徑可以有 1 到 255 個字符。數據文件最多可包含 263 - 1 行。
重要提示 對於 format 選項,必須指定 nul 作爲 data_file 的值 (formatnul)。
- -m max_errors
指定取消 bcp 操作之前可能出現的語法錯誤的最大數目。語法錯誤是指將數據轉換爲目標數據類型時的錯誤。max_errors 總數不包括只能在服務器中檢測到的錯誤,如違反約束。
無法由 bcp 實用工具複製的行將被忽略,並計爲一個錯誤。如果未包括此選項,則默認值爲 10。
注意 -m 選項也不適用於轉換 money 或 bigint 數據類型。
- -f format_file
指定格式化文件的完整路徑。此選項的含義取決於使用它的環境,具體如下:
如果 -f 與 format 選項一起使用,則將爲指定的表或視圖創建指定的 format_file。若要創建 XML 格式化文件,請同時指定 -x 選項。有關詳細信息,請參閱創建格式化文件。
如果與 in 或 out 選項一起使用,則 -f 需要一個現有的格式化文件。
注意 與in 或 out 選項一起使用時,格式化文件是可選的。如果沒有 -f 選項,則在未指定 -n、-c、-w 或 -N 時,該命令將提示輸入格式信息,並允許您將響應保存在格式化文件(默認文件名爲 Bcp.fmt)中。
如果 format_file 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -f 與 format_file 名稱之間包含空格。
- -x
與 format 和 -fformat_file 選項一起使用,可以生成基於 XML 的格式化文件,而不是默認的非 XML 格式化文件。在導入或導出數據時,-x 不起作用。如果不與 format 和 -fformat_file 一起使用,則將生成錯誤。
注意 若要使用 -x 開關,則必須使用 bcp 10.0 客戶端。有關如何使用 bcp 10.0 客戶端的信息,請參閱本主題後面的“備註”。
- -e err_file
指定錯誤文件的完整路徑,此文件用於存儲 bcp 實用工具無法從文件傳輸到數據庫的所有行。bcp 命令產生的錯誤消息將被髮送到用戶的工作站。如果不使用此選項,則不會創建錯誤文件。
如果 err_file 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -e 與 err_file 名稱之間包含空格。
- -F first_row
指定要從表中導出或從數據文件導入的第一行的編號。此參數的值應大於 (>) 0,小於 (<) 或等於 (=) 總行數。如果未指定此參數,則默認爲文件的第一行。
first_row 可以是一個最大爲 2^63-1 的正整數值。-Ffirst_row 從 1 開始。
- -L last_row
指定要從表中導出或從數據文件中導入的最後一行的編號。此參數的值應大於 (>) 0,小於 (<) 或等於 (=) 最後一行的編號。如果未指定此參數,則默認爲文件的最後一行。
last_row 可以是一個最大爲 2^63-1 的正整數值。
- -b batch_size
指定每批導入數據的行數。每個批次均作爲一個單獨的事務進行導入並記錄,在提交之前會導入整批。默認情況下,數據文件中的所有行均作爲一個批次導入。若要將行分爲多個批次進行操作,請指定小於數據文件中的行數的 batch_size。如果任何批次的事務失敗,則將只回滾當前批次中的插入。已經由已提交事務導入的批次不會受到將來失敗的影響。
請不要將此選項與 -h"ROWS_PER_BATCH =bb" 選項一起使用。
有關詳細信息,請參閱管理大容量導入的批處理。
- -d database_name
指定要連接到的數據庫。默認情況下,bcp.exe 連接到用戶的默認數據庫。
如果指定了 -ddatabase_name 以及一個由三個部分組成的名稱(database_name.schema.table,作爲第一個參數傳遞給 bcp.exe),將發生錯誤。這是因爲您無法兩次指定此數據庫名稱。
如果 database_name 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -d 與數據庫名稱之間添加空格。
- -n
使用數據的本機(數據庫)數據類型執行大容量複製操作。此選項不提示輸入每個字段,它將使用本機值。
有關詳細信息,請參閱使用本機格式導入或導出數據。
- -c
使用字符數據類型執行該操作。此選項不提示輸入每個字段;它使用 char 作爲存儲類型,不帶前綴;使用 /t(製表符)作爲字段分隔符,使用 /r/n(換行符)作爲行終止符。
有關詳細信息,請參閱使用字符格式導入或導出數據。
- -N
執行大容量複製操作時,對非字符數據使用本機(數據庫)數據類型的數據,對字符數據使用 Unicode 字符。此選項是 -w 選項的一個替代選項,並具有更高的性能。此選項主要用於通過數據文件將數據從一個 SQL Server 實例傳送到另一個實例。此選項不提示輸入每個字段。如果要傳送包含 ANSI 擴展字符的數據,並希望利用本機模式的性能優勢,則可使用此選項。
有關詳細信息,請參閱使用 Unicode 本機格式導入或導出數據。
從 SQL Server 2005 SP1 中開始,如果您通過將 bcp.exe 與 -N 一起使用來導出數據後又將數據導入到同一表架構中,則在存在固定長度的非 Unicode 字符列(例如 char(10))的情況下,系統可能會顯示截斷警告。
可忽略該警告。解決此警告的一個方法就是使用 -n 來代替 -N。
- -w
使用 Unicode 字符執行大容量複製操作。此選項不提示輸入每個字段;它使用 nchar 作爲存儲類型,不帶前綴;使用 /t(製表符)作爲字段分隔符,使用 /n(換行符)作爲行終止符。
有關詳細信息,請參閱使用 Unicode 字符格式導入或導出數據。
- -V (70 | 80 | 90 )
使用 SQL Server 早期版本中的數據類型執行大容量複製操作。此選項並不提示輸入每個字段,它將使用默認值。
70 = SQL Server 7.0
80 = SQL Server 2000
90 = SQL Server 2005
例如,若要爲 SQL Server 7.0 不支持、但是在較高版本的 SQL Server 中引入的類型(例如,bigint、sql_variant 和 xml)生成數據,請使用 -V70 選項。
有關詳細信息,請參閱導入來自早期版本的 SQL Server 的本機格式數據和字符格式數據。
- -q
在 bcp 實用工具和 SQL Server 實例之間的連接中,執行 SET QUOTED_IDENTIFIERS ON 語句。使用此選項可以指定包含空格或單引號的數據庫、所有者、表或視圖的名稱。將由三部分組成的整個表名或視圖名用英文雙引號 ("") 引起來。
若要指定包含空格或單引號的數據庫名稱,必須使用 -q 選項。
-q 不適用於傳遞到 -d 的值。
有關詳細信息,請參閱本主題後面的“備註”。
- -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 編碼)。有關詳細信息,請參閱在不同排序規則間複製數據。
- -t field_term
指定字段終止符。默認值爲 /t(製表符)。使用此參數可以替代默認字段終止符。有關詳細信息,請參閱指定字段終止符和行終止符。
如果您在 bcp.exe 命令中以十六進制表示法指定字段終止符,則該值將在 0x00 處截斷。例如,如果您指定 0x410041,則將使用 0x41。
如果 field_term 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -t 與 field_term 值之間包含空格。
- -r row_term
指定行終止符。默認值爲 /n(換行符)。使用此參數可替代默認行終止符。有關詳細信息,請參閱指定字段終止符和行終止符。
如果您在 bcp.exe 命令中以十六進制表示法指定行終止符,則該值將在 0x00 處截斷。例如,如果您指定 0x410041,則將使用 0x41。
如果 row_term 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -r 與 row_term 值之間包含空格。
- -i input_file
指定響應文件的名稱,其中包含在交互模式(未指定 -n、-c、-w 或 -N)下執行大容量複製時,對該命令要求輸入每個數據字段的提示信息所作出的響應。
如果 input_file 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -i 與 input_file 名稱之間包含空格。
- -o output_file
指定文件名稱,該文件用於接收從命令提示符重定向來的輸出。
如果 output_file 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -o 與 output_file 名稱之間包含空格。
- -a packet_size
指定服務器發出或接收的每個網絡數據包的字節數。可以使用 SQL Server Management Studio(或 sp_configure 系統存儲過程)來設置服務器配置選項。但是,可以使用此選項逐個替代服務器配置選項。packet_size 的取值範圍爲 4096 到 65535 字節,默認爲 4096 字節。
增大數據包可以提高大容量複製操作的性能。如果無法得到請求的較大數據包,則使用默認值。bcp 實用工具生成的性能統計信息可以顯示所用的數據包大小。
- -S server_name[ /instance_name]
指定要連接的 SQL Server 實例。如果未指定服務器,則 bcp 實用工具將連接到本地計算機上的默認 SQL Server 實例。如果從網絡或本地命名實例上的遠程計算機中運行 bcp 命令,則必須使用此選項。若要連接到服務器上的 SQL Server 默認實例,請僅指定 server_name。若要連接到 SQL Server 的命名實例,請指定 server_name/instance_name。
- -U login_id
指定用於連接到 SQL Server 的登錄 ID。
安全說明 如果 bcp 實用工具通過使用集成安全性的受信任連接與 SQL Server 進行連接,則使用 -T 選項(可信連接),而不要使用 user name 和 password 的組合。
- -P password
指定登錄 ID 的密碼。如果未使用此選項,bcp 命令將提示輸入密碼。如果在命令提示符的末尾使用此選項,但不提供密碼,則 bcp 將使用默認密碼 (NULL)。
安全說明 不要使用空密碼。請使用強密碼。
若要屏蔽密碼,請不要同時指定 -P 和 -U 選項。而應在指定 bcp 以及 -U 選項和其他開關(不指定 -P)之後按 Enter,這時命令會提示輸入密碼。這種方法可以確保輸入密碼時對其屏蔽。
如果 password 以連字符 (-) 或正斜槓 (/) 開頭,則不要在 -P 與 password 之間添加空格。
- -T
指定 bcp 實用工具通過使用集成安全性的可信連接連接到 SQL Server。不需要網絡用戶的安全憑據、login_id 和 password。如果未指定 –T,則需要指定 –U和 –P 才能成功登錄。
- -v
報告 bcp 實用工具的版本號和版權。
- -R
指定使用客戶端計算機區域設置中定義的區域格式,將貨幣、日期和時間數據大容量複製到 SQL Server 中。默認情況下,將忽略區域設置。
- -k
指定在操作過程中空列應該保留 null 值,而不是所插入列的任何默認值。有關詳細信息,請參閱在大容量導入期間保留 Null 值或使用默認值。
- -E
指定導入數據文件中的標識值用於標識列。如果未指定 -E,則將忽略所導入數據文件中此列的標識值,而且 SQL Server 將根據創建表期間指定的種子值和增量值自動分配唯一值。
如果數據文件不包含表或視圖中的標識列的值,則可使用格式化文件指定,在導入數據時應跳過表或視圖中的標識列;SQL Server 將自動爲該列分配唯一值。有關詳細信息,請參閱 DBCC CHECKIDENT (Transact-SQL)。
-E 選項有一個特殊的權限要求。有關詳細信息,請參閱本主題後面的“備註”。
- -h " hint[ ,...n] "
指定向表或視圖中大容量導入數據時要用到的提示。