溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL Server數(shù)據(jù)導(dǎo)入導(dǎo)出工具BCP怎么用

發(fā)布時(shí)間:2021-11-17 11:18:05 來(lái)源:億速云 閱讀:106 作者:小新 欄目:云計(jì)算

小編給大家分享一下SQL Server數(shù)據(jù)導(dǎo)入導(dǎo)出工具BCP怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

BCP是SQL Server中負(fù)責(zé)導(dǎo)入導(dǎo)出數(shù)據(jù)的一個(gè)命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)。BCP可以將數(shù)據(jù)庫(kù)的表或視圖直接導(dǎo)出,也能通過(guò)SELECT FROM語(yǔ)句對(duì)表或視圖進(jìn)行過(guò)濾后導(dǎo)出。在導(dǎo)入導(dǎo)出數(shù)據(jù)時(shí),可以使用默認(rèn)值或是使用一個(gè)格式文件將文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)或?qū)?shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到文件中。

  下面將詳細(xì)討論如何利用  BCP導(dǎo)入導(dǎo)出數(shù)據(jù)。

    1. BCP的主要參數(shù)介紹

    BCP共有四個(gè)動(dòng)作可以選擇。

    (1) 導(dǎo)入。

這個(gè)動(dòng)作使用  in命令完成,后面跟需要導(dǎo)入的文件名。

例如:

bcp sxculture.dbo.show_t_type in c:\temp\show_t_type -U sa  -P 111111      -Szhouyx -c -Jcp850

    (2) 導(dǎo)出。

這個(gè)動(dòng)作使用  out命令完成,后面跟需要導(dǎo)出的文件名。

例如:

bcp sxculture.dbo.Cul_MuseumData out d:\Cul_MuseumData_out -Usa -P111111 -Szhouyx -c

    (3) 使用SQL語(yǔ)句導(dǎo)出。

  這個(gè)動(dòng)作使用  queryout命令完成,它跟out類似,只是數(shù)據(jù)源不是表或視圖名,而是SQL語(yǔ)句。

    (4) 導(dǎo)出格式文件。

  這個(gè)動(dòng)作使用  format命令完成,后而跟格式文件名。

  下面介紹一些常用的選項(xiàng):

    -f format_file

    format_file表示格式文件名。這個(gè)選項(xiàng)依賴于上述的動(dòng)作,如果使用的是in或out,format_file表示已經(jīng)存在的格式文件,如果使用的是format則表示是要生成的格式文件。

    -x

  這個(gè)選項(xiàng)要和  -f format_file配合使用,以便生成xml格式的格式文件。

    -F first_row

  指定從被導(dǎo)出表的哪一行導(dǎo)出,或從被導(dǎo)入文件的哪一行導(dǎo)入。

    -L last_row

  指定被導(dǎo)出表要導(dǎo)到哪一行結(jié)束,或從被導(dǎo)入文件導(dǎo)數(shù)據(jù)時(shí),導(dǎo)到哪一行結(jié)束。

    -c

  在使用密碼登錄時(shí)需要將  -U后的用戶名和-P后的密碼加上雙引號(hào)。

  注:  BCP除了可以在控制臺(tái)執(zhí)行外,還可以通過(guò)調(diào)用SQL Server的一個(gè)系統(tǒng)存儲(chǔ)過(guò)程xp_cmdshell以SQL語(yǔ)句的方式運(yùn)行BCP。如上述第一條命令可改寫為

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency out c:currency1.txt -c -U"sa" -P"password"'

  執(zhí)行  xp_cmdshell后,返回信息以表的形式輸出。為了可以方便地在SQL中執(zhí)行BCP,下面的命令都使用xp_cmdshell執(zhí)行BCP命令。

    (2) 對(duì)要導(dǎo)出的表進(jìn)行過(guò)濾。

    BCP不僅可以接受表名或視圖名做為參數(shù),也可以接受SQL做為參數(shù)。通過(guò)SQL語(yǔ)句可以對(duì)要導(dǎo)出的表進(jìn)行過(guò)濾,然后導(dǎo)出過(guò)濾后的記錄。

    EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:currency2.txt -c -U"sa" -P"password"'

    BCP還可以通過(guò)簡(jiǎn)單地設(shè)置選項(xiàng)對(duì)導(dǎo)出的行進(jìn)行限制。

    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"'

  這條命令使用了兩個(gè)參數(shù)  -F 10和-L 13,表示從SELECT TOP 20 * FROM AdventureWorks.sales.currency所查出來(lái)的結(jié)果中取第10條到13條記錄進(jìn)行導(dǎo)出。

    3. 如何使用BCP導(dǎo)出格式文件

    BCP不僅可以根據(jù)表、視圖導(dǎo)入導(dǎo)出數(shù)據(jù),還可以配合格式文件對(duì)導(dǎo)入導(dǎo)出數(shù)據(jù)進(jìn)行限制。格式文件以純文本文件形式存在,分為一般格式和xml格式。用戶可以手工編寫格式文件,也可以通過(guò)BCP命令根據(jù)表、視圖自動(dòng)生成格式文件。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:currency_format1.fmt -c -T'

  上述命令將  currency表的結(jié)構(gòu)生成了一個(gè)格式文件currency_format1.fmt,下面是這個(gè)格式文件的內(nèi)容。

    9.0

    3

    1 SQLCHAR 0 6 "  " 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS

    2 SQLCHAR 0 100 "  " 2 Name SQL_Latin1_General_CP1_CI_AS

    3 SQLCHAR 0 24 " " 3 ModifiedDate

  這個(gè)格式文件記錄了這個(gè)表的字段(共  3個(gè)字段)類型、長(zhǎng)度、字符和行分割符和字段名等信息。

    BCP還可以通過(guò)-x選項(xiàng)生成xml格式的格式文件。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:currency_format2.fmt -x -c -T'

    xml格式文件所描述的內(nèi)容和普通格式文件所描述的內(nèi)容完全一樣,只是格式不同。

    4. 如何使用BCP導(dǎo)入數(shù)據(jù)

    BCP可以通過(guò)in命令將上面所導(dǎo)出的currency1.txt和currency2.txt再重新導(dǎo)入到數(shù)據(jù)庫(kù)中,由于currency有主鍵,因此我們將復(fù)制一個(gè)和currency的結(jié)構(gòu)完全一樣的表。

    SELECT TOP 0 * INTO AdventureWorks.sales.currency1 FROM AdventureWorks.sales.currency

  將數(shù)據(jù)導(dǎo)入到  currency1表中

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -T'

  導(dǎo)入數(shù)據(jù)也同樣可以使用  -F和-L選項(xiàng)來(lái)選擇導(dǎo)入數(shù)據(jù)的記錄行。

    EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency1 in c:currency1.txt -c -F 10 -L 13 -T'

  在導(dǎo)入數(shù)據(jù)時(shí)可以根據(jù)已經(jīng)存在的格式文件將滿足條件的記錄導(dǎo)入到數(shù)據(jù)庫(kù)中,不滿足則不導(dǎo)入。如上述的格式文件中的第三個(gè)字段的字符長(zhǎng)度是  24,如果某個(gè)文本文件中的相應(yīng)字段的長(zhǎng)度超過(guò)24,則這條記錄將不被導(dǎo)入到數(shù)據(jù)庫(kù)中,其它滿足條件的記錄正常導(dǎo)入。

  使用普通的格式文件

    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'

  總結(jié)

    BCP命令是SQL Server提供的一個(gè)快捷的數(shù)據(jù)導(dǎo)入導(dǎo)出工具。使用它不需要啟動(dòng)任何圖形管理工具就能以高效的方式導(dǎo)入導(dǎo)出數(shù)據(jù)。當(dāng)然,它也可以通過(guò)xp_cmdshell在SQL語(yǔ)句中執(zhí)行,通過(guò)這種方式可以將其放到客戶端程序中(如delphi、c#等)運(yùn)行,這也是使客戶端程序具有數(shù)據(jù)導(dǎo)入導(dǎo)出功能的方法之一。

  使用  char類型做為存儲(chǔ)類型,沒(méi)有前綴且以"  "做為字段分割符,以" "做為行分割符。

    -w

  和  -c類似,只是當(dāng)使用Unicode字符集拷貝數(shù)據(jù)時(shí)使用,且以nchar做為存儲(chǔ)類型。

    -t field_term

  指定字符分割符,默認(rèn)是  "  "。

    -r row_term

  指定行分割符,默認(rèn)是  " "。

    -S server_name[ instance_name]

  指定要連接的  SQL Server服務(wù)器的實(shí)例,如果未指定此選項(xiàng),BCP連接本機(jī)的SQL Server默認(rèn)實(shí)例。如果要連接某臺(tái)機(jī)器上的默認(rèn)實(shí)例,只需要指定機(jī)器名即可。

    -U login_id

  指定連接  SQL Sever的用戶名。

    -P password

  指定連接  SQL Server的用戶名密碼。---www.bianceng.cn

    -T

  指定  BCP使用信任連接登錄SQL Server。如果未指定-T,必須指定-U和-P。

    -k

  指定空列使用  null值插入,而不是這列的默認(rèn)值。

    2. 如何使用BCP導(dǎo)出數(shù)據(jù)

    (1) 使用BCP導(dǎo)出整個(gè)表或視圖。

    BCP AdventureWorks.sales.currency out c:currency1.txt -c -U"sa" -P"password" --使用密碼連接

  或

    BCP AdventureWorks.sales.currency out c:currency1.txt -c -T --使用信任連接

  下面是上述命令執(zhí)行后的輸出結(jié)果

    Starting copy...

    105 rows copied.

    Network packet size (bytes): 4096

    Clock Time (ms.) Total : 10 Average : (10500.00 rows per sec.)

  下面是  currency1.txt的部分內(nèi)容

    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

看完了這篇文章,相信你對(duì)“SQL Server數(shù)據(jù)導(dǎo)入導(dǎo)出工具BCP怎么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI