程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> sqlserver bcp(數據導入導收工具)普通用法與敕令詳解

sqlserver bcp(數據導入導收工具)普通用法與敕令詳解

編輯:MSSQL

sqlserver bcp(數據導入導收工具)普通用法與敕令詳解。本站提示廣大學習愛好者:(sqlserver bcp(數據導入導收工具)普通用法與敕令詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是sqlserver bcp(數據導入導收工具)普通用法與敕令詳解正文


bcp是SQL Server中擔任導入導出數據的一個敕令行對象,它是基於DB-Library的,而且能以並行的方法高效地導入導出年夜批量的數據。bcp可以將數據庫的表或視圖直接導出,也能經由過程SELECT FROM語句對表或視圖停止過濾後導出。在導入導出數據時,可使用默許值或是應用一個格局文件將文件中的數據導入到數據庫或將數據庫中的數據導出到文件中。上面將具體評論辯論若何應用bcp導入導出數據。

1. bcp的重要參數引見

bcp共有四個舉措可以選擇。
(1) 導入。
這個舉措應用in敕令完成,前面跟須要導入的文件名。
(2) 導出。
這個舉措應用out敕令完成,前面跟須要導出的文件名。
(3) 應用SQL語句導出。
這個舉措應用queryout敕令完成,它跟out相似,只是數據源不是表或視圖名,而是SQL語句。
(4) 導出格局文件。
這個舉措應用format敕令完成,後而跟格局文件名。
上面引見一些經常使用的選項:
-f format_file
format_file表現格局文件名。這個選項依附於上述的舉措,假如應用的是in或out,format_file表現曾經存在的格局文件,假如應用的是format則表現是要生成的格局文件。
-x
這個選項要和-f format_file合營應用,以便生成xml格局的格局文件。
-F first_row
指定從被導出表的哪一行導出,或從被導入文件的哪一行導入。
-L last_row
指定被導出表要導到哪一行停止,或從被導入文件導數據時,導到哪一行停止。
-c
應用char類型做為存儲類型,沒有前綴且以"\t"做為字段朋分符,以"\n"做為行朋分符。
-w
和-c相似,只是當應用Unicode字符集拷貝數據時應用,且以nchar做為存儲類型。
-t field_term
指定字符朋分符,默許是"\t"。
-r row_term
指定行朋分符,默許是"\n"。
-S server_name[ \instance_name]
指定要銜接的SQL Server辦事器的實例,假如未指定此選項,bcp銜接本機的SQL Server默許實例。假如要銜接某台機械上的默許實例,只須要指定機械名便可。
-U login_id
指定銜接SQL Sever的用戶名。
-P password
指定銜接SQL Server的用戶名暗碼。
-T
指定bcp應用信賴銜接登錄SQL Server。假如未指定-T,必需指定-U和-P。
-k
指定空列應用null值拔出,而不是這列的默許值。

2. 若何應用bcp導出數據

(1) 應用bcp導出全部表或視圖。
bcp AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password" --應用暗碼銜接或bcp AdventureWorks.sales.currency out c:\currency1.txt -c -T --應用信賴銜接
上面是上述敕令履行後的輸入成果
Starting copy...
105 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)
上面是currency1.txt的部門內容
AED Emirati Dirham 1998-06-01 00:00:00.000
AFA Afghani 1998-06-01 00:00:00.000
... ... ...
... ... ...
ZWD Zimbabwe Dollar 1998-06-01 00:00:00.000
在應用暗碼登錄時須要將-U後的用戶名和-P後的暗碼加上雙引號。
注:bcp除可以在掌握台履行外,還可以經由過程挪用SQL Server的一個體系存儲進程xp_cmdshell以SQL語句的方法運轉bcp。如上述第一條敕令可改寫為
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency out c:\currency1.txt -c -U"sa" -P"password"'
履行xp_cmdshell後,前往信息以表的情勢輸入。為了可以便利地在SQL中履行bcp,上面的敕令都應用xp_cmdshell履行bcp敕令。
(2) 對要導出的表停止過濾。
bcp不只可以接收表名或視圖名做為參數,也能夠接收SQL做為參數。經由過程SQL語句可以對要導出的表停止過濾,然後導出過濾後的記載。
EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -c -U"sa" -P"password"'
bcp還可以經由過程簡略地設置選項對導出的行停止限制。
這條敕令應用了兩個參數-F 10和-L 13,表現從SE
EXEC master..xp_cmdshell 'bcp "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -F 10 -L 13 -c -U"sa" -P"password"'
LECT TOP 20 * FROM AdventureWorks.sales.currency所查出來的成果中取第10條到13筆記錄停止導出。

3. 若何應用bcp導出格局文件

bcp不只可以依據表、視圖導入導出數據,還可以合營格局文件對導入導出數據停止限制。格局文件以純文本文件情勢存在,分為普通格局和xml格局。用戶可以手工編寫格局文件,也能夠經由過程bcp敕令依據表、視圖主動生成格局文件。
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'
上述敕令將currency表的構造生成了一個格局文件currency_format1.fmt,上面是這個格局文件的內容。
9.0
3
1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate
這個格局文件記載了這個表的字段(共3個字段)類型、長度、字符和行朋分符和字段名等信息。
bcp還可以經由過程-x選項生成xml格局的格局文件。
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'
xml格局文件所描寫的內容和通俗格局文件所描寫的內容完整一樣,只是格局分歧。

4. 若何應用bcp導入數據

bcp可以經由過程in敕令將下面所導出的currency1.txt和currency2.txt再從新導入到數據庫中,因為currency有主鍵,是以我們將復制一個和currency的構造完整一樣的表。
SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency
將數據導入到currency1表中
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency1 in c:\currency1.txt -c -T'
導入數據也異樣可使用-F和-L選項來選擇導入數據的記載行。
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency1 in c:\currency1.txt -c -F 10 -L 13 -T'
在導入數據時可以依據曾經存在的格局文件將知足前提的記載導入到數據庫中,不知足則不導入。如上述的格局文件中的第三個字段的字符長度是24,假如某個文本文件中的響應字段的長度跨越24,則這筆記錄將不被導入到數據庫中,其它知足前提的記載正常導入。
應用通俗的格局文件
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -f c:\currency_format1.fmt -T'
應用xml格局的格局文件
EXEC master..xp_cmdshell 'bcp AdventureWorks.sales.currency1 in c:\currency1.txt -F 10 -L 13 -c -x -f c:\currency_format2.fmt -T'

總結

bcp敕令是SQL Server供給的一個快捷的數據導入導收工具。應用它不須要啟動任何圖形治理對象就可以以高效的方法導入導出數據。固然,它也能夠經由過程xp_cmdshell在SQL語句中履行,經由過程這類方法可以將其放到客戶端法式中(如delphi、c#等)運轉,這也是使客戶端法式具稀有據導入導出功效的辦法之一。

bcp敕令詳解(sybase)

bcp 適用對象在 Microsoft SQL Server 2000 實例和數據文件之間以用戶指定的格局復制數據。
語法
bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C 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

指定的表或視圖地點數據庫的稱號。假如未指定,則為用戶默許數據庫。

owner

表或視圖一切者的稱號。假如履行年夜容量復制操作的用戶具有指定的表或視圖,則 owner 是可選的。假如沒有指定 owner 而且履行年夜容量復制操作的用戶不具有指定的表或視圖,則 Microsoft? SQL Server? 2000 將前往毛病信息並撤消年夜容量復制操作。

table_name

是將數據復制到 SQL Server 時 (in) 的目標表名,和從 SQL Server 復制數據時 (out) 的源表名。

view_name

是將數據復制到 SQL Server 時 (in) 的目標視圖名,和從 SQL Server 復制數據時 (out) 的源視圖名。只要個中一切列都援用統一個表的視圖能力用作目標視圖。有關將數據復制到視圖的限制的更多信息,請拜見 INSERT。

Query

是前往一個成果集的 Transact-SQL 查詢。假如查詢前往多個成果集,例如指定 COMPUTE 子句的 SELECT 語句,只要第一個成果集將復制到數據文件,隨後的成果集被疏忽。應用雙引號惹起查詢語句,應用單引號惹起查詢語句中嵌入的任何內容。在從查詢中年夜容量復制數據時,還必需指定 queryout。

in | out | queryout | format

指定年夜容量復制的偏向。in 是從文件復制到數據庫表或視圖,out 是指從數據庫表或視圖復制到文件。只要從查詢中年夜容量復制數據時,才必需指定 queryout。依據指定的選項(-n、-c、-w、-6 或 -N)和表或視圖分隔符,format 將創立一個格局文件。假如應用 format,則還必需指定 -f 選項。



解釋 Microsoft SQL Server 6.5 中的 bcp 適用對象不支撐年夜容量復制到包括 sql_variant 或 bigint 數據類型的表。


data_file

年夜容量復制表或視圖到磁盤(或許從磁盤復制)時所用數據文件的完全途徑。當將數據年夜容量復制到 SQL Server 時,此數據文件包括將復制到指定表或視圖的數據。當從 SQL Server 年夜容量復制數據時,該數據文件包括從表或視圖復制的數據。途徑可以有 1 到 255 個字符。

-m max_errors

指定在年夜容量復制操作撤消之前能夠發生的毛病的最年夜數量。bcp 沒法復制的每行都將被疏忽並計為一個毛病。假如沒有包含該選項,則默許為 10。

-f format_file

指定格局文件的完全途徑,該格局文件包括之前在統一個表或視圖上應用 bcp 時的存儲呼應。當應用由 format 選項所創立的格局文件年夜容量復制入或復制出數據時,應用此選項。格局文件的創立是可選的。在提醒幾個格局成績以後,bcp 將提醒能否在格局文件中保留答復。默許文件名為 Bcp.fmt。年夜容量復制數據時,bcp 可援用一個格局文件,是以不用從新交互輸出之前的答復。假如未應用此選項,也沒有指定 –n、-c、-w、-6 或 -N,則 bcp 將提醒輸出格局信息。

-e err_file

指定毛病文件的完全途徑,此毛病文件用於存儲 bcp 沒法從文件傳輸到數據庫的一切行。來自 bcp 的毛病信息將發送到用戶任務站。假如未應用此選項,則不創立毛病文件。

-F first_row

指定要年夜容量復制的第一行的序數。默許值是 1,表現在指定命據文件的第一行。

-L last_row

指定要年夜容量復制的最初一行的序數。默許值是 0,表現指定命據文件中的最初一行。

-b batch_size

指定所復制的每批數據中的行數。每一個批處置作為一個事務復制至辦事器。SQL Server 提交或回滾(在掉敗時)每一個批處置的事務。默許情形下,指定的數據文件中的一切數據都作為一批復制。請不要與 -h "ROWS_PER_BATCH = bb" 選項一路應用。

-n

應用數據的本機(數據庫)數據類型履行年夜容量復制操作。此選項不提醒輸出每字段,它將應用本機值。

-c

應用字符數據類型履行年夜容量復制操作。此選項不提醒輸出每字段;它應用 char 作為存儲類型,不帶前綴,\t(制表符)作為字段分隔符,\n(換行符)作為行終止符。

-w

應用 Unicode 字符履行年夜容量復制操作。此選項不提醒輸出每字段;它應用 nchar 作為存儲類型,不帶前綴,\t(制表符)作為字段分隔符,\n(換行符)作為行終止符。不克不及在 SQL Server 6.5 版或更早版本中應用。

-N

對非字符數據應用數據的本機(數據庫)數據類型和對字符數據應用 Unicode 字符類型履行年夜容量復制操作。這是可替換 -w 選項的機能更高的選項,其目標是應用數據文件將數據從一個 SQL Server 傳輸到另外一個 SQL Server 中。它不提醒輸出每字段。在須要傳輸包括 ANSI 擴大字符的數據和想應用本機形式的機能時,可使用這一選項。不克不及在 SQL Server 6.5 版或更早版本中應用 -N 選項。

-V (60 | 65 | 70)

應用 SQL Server 晚期版本中的數據類型履行年夜容量復制操作。此選項與字符 (-c) 或本機 (-n) 格局一路應用。此選項其實不提醒輸出每字段,它應用默許值。例如,若要將 SQL Server 6.5 中的 bcp 適用對象所支撐(但 ODBC 不再支撐)的日期格局年夜容量復制到 SQL Server 2000,可以使用 -V 65 參數。



主要 將數據從 SQL Server 年夜容量復制到數據文件時,即便指定了 –V,bcp 適用對象也不會為任何 datetime 或 smalldatetime 數據生成 SQL Server 6.0 或 SQL Server 6.5 的日期格局。日期將一直以 ODBC 格局寫入。別的,因為 SQL Server 6.5 版或更早版本不支撐可為空的 bit 數據,是以 bit 列中的空值寫為值 0。


-6

應用 SQL Server 6.0 或 SQL Server 6.5 數據類型履行年夜容量復制操作。僅為堅持向後兼容性。改成應用 –V 選項。

-q

在 bcp 適用對象和 SQL Server 實例的銜接中履行 SET QUOTED_IDENTIFIERS ON 語句。應用該選項指定包括空格或引號的數據庫、一切者、表或視圖的稱號。將由三部門構成的全部表名或視圖名引在雙引號 (" ") 中。

-C code_page

僅為堅持向後兼容性。作為取代,請在格局文件或交互式 bcp 中為每列指定一個排序規矩名。

指定命據文件中的數據代碼頁。只要當數據中包括字符值年夜於 127 或小於 32 的 char、varchar 或 text 列時,code_page 才有效。

代碼頁值 描寫
ACP ANSI/Microsoft Windows? (ISO 1252)。
OEM 客戶法式應用的默許代碼頁。假如未指定 -C,則這是 bcp 應用的默許代碼頁。
RAW 不產生從一個代碼頁到另外一個代碼頁的轉換。由於不產生轉換,所以這是最快的選項。
<值> 特定的代碼頁號碼,例如 850。


-t field_term

指定字段終止符。默許的字段終止符是 \t(制表符)。應用此參數替換默許字段終止符。

-r row_term

指定行終止符。默許的行終止符是 \n(換行符)。應用此參數替換默許行終止符。

-i input_file

指定呼應文件的稱號,應用交互形式(未指定 –n、-c、-w、-6 或 -N)履行年夜容量復制時,呼應文件包括對每字段敕令提醒成績的呼應。

-o output_file

指定吸收 bcp 輸入(從敕令提醒重定向)的文件的稱號。

-a packet_size

指定發送到和發送自辦事器的每一個收集數據包的字節數。可使用 SQL Server 企業治理器(或 sp_configure 體系存儲進程)設置辦事器設置裝備擺設選項。然則,應用此選項可以單個地替換辦事器設置裝備擺設選項。packet_size 可以設置為 4096 到 65535 字節,默許值為 4096。

數據包年夜小的增長可以或許進步年夜容量復制操作的機能。假如請求一個較年夜的數據包而得不到,則應用默許設置。bcp 生成的機能統計顯示出所應用數據包的年夜小。

-S server_name[\instance_name]

指定要銜接到的 SQL Server 實例。指定 server_name 以銜接該辦事器上的 SQL Server 默許實例。指定 server_name\instance_name 以銜接到該辦事器上的 SQL Server 2000 定名實例。假如未指定辦事器,則 bcp 銜接到當地盤算機上的 SQL Server 默許實例。從收集上的長途盤算機履行 bcp 時,請求此選項。

-U login_id

指定用於銜接到 SQL Server 的登錄 ID。

-P password

指定登錄 ID 的暗碼。假如未應用此選項,則 bcp 將提醒輸出暗碼。假如不帶暗碼將此選項用於敕令提醒行末尾,則 bcp 將應用默許暗碼 (NULL)。

-T

指定 bcp 應用收集用戶的平安憑證,經由過程信賴銜接銜接到 SQL Server。不須要 login_id 和 password。

-v

申報 bcp 適用對象的版本號和版權。

-R

指定應用為客戶端盤算機的區域設置界說的區域格局,將泉幣、日期和時光數據年夜容量復制到 SQL Server 中。默許情形下,將會疏忽區域設置。

-k

指定在年夜容量復制操作中空列應保存一個空值,而不是對拔出的列付與默許值。

bcp 的普通用法

用法: bcp {dbtable | query} {in | out | queryout | format} 數據文件

[-m 最年夜毛病數] [-f 格局化文件] [-e 毛病文件]
[-F 首行] [-L 末行] [-b 批年夜小]
[-n 本機類型] [-c 字符類型] [-w 寬字符類型]
[-N 將非文本堅持為本機類型] [-V 文件格局版本] [-q 帶引號的標識符]
[-C 代碼頁解釋符] [-t 字段終止符] [-r 行終止符]
[-i 輸出文件] [-o 輸入文件] [-a 數據包年夜小]
[-S 辦事器稱號] [-U 用戶名] [-P 暗碼]
[-T 可托銜接] [-v 版本] [-R 許可應用區域設置]
[-k 保存空值] [-E 保存標識值]
[-h"加載提醒"] [-x 生成xml 格局化文件]
導入csv格局文件
Exec master..xp_cmdshell 'bcp "SSIS.dbo.tb2" in "E:\export.csv" -c -t"," -r"\n" -T'
導出成csv
Exec master..xp_cmdshell 'bcp "SSIS.dbo.tb2" out "E:\test.csv" -c -t"," -r"\n" -T'
將特定查詢導出成默許格局
默許以制表符距離,"\n"換行
Exec master..xp_cmdshell 'bcp "select carbrand,longitude from ssis.dbo.tb2" queryout "E:\test2.txt" -c -T'
其他情形參考:http://msdn.microsoft.com/zh-cn/library/ms162802.aspx
啟用xp_cmdshell
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved