Bcp導出SQL Server亂碼

sp_configure 'show advanced options',1
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 | outqueryout | 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 中引入的類型(例如,bigintsql_variant 和 xml)生成數據,請使用 -V70 選項。

有關詳細信息,請參閱導入來自早期版本的 SQL Server 的本機格式數據和字符格式數據

-q

在 bcp 實用工具和 SQL Server 實例之間的連接中,執行 SET QUOTED_IDENTIFIERS ON 語句。使用此選項可以指定包含空格或單引號的數據庫、所有者、表或視圖的名稱。將由三部分組成的整個表名或視圖名用英文雙引號 ("") 引起來。

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

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

有關詳細信息,請參閱本主題後面的“備註”。

-C { ACP | OEM | RAW | code_page }

指定數據文件中數據的代碼頁。僅當數據包含字符值大於 127 或小於 32 的 charvarchar 或 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"

指定向表或視圖中大容量導入數據時要用到的提示。

發佈了30 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章