bcp是SQL Server中負(fù)責(zé)導(dǎo)入導(dǎo)出數(shù)據(jù)的一個命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)。bcp可以將數(shù)據(jù)庫的表或視圖直接導(dǎo)出,也能通過SELECT FROM語句對表或視圖進(jìn)行過濾后導(dǎo)出。在導(dǎo)入導(dǎo)出數(shù)據(jù)時,可以使用默認(rèn)值或是使用一個格式文件將文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫或?qū)?shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到文件中。下面將詳細(xì)討論如何利用bcp導(dǎo)入導(dǎo)出數(shù)據(jù)。 1. bcp的主要參數(shù)介紹 bcp共有四個動作可以選擇。 (1) 導(dǎo)入。 這個動作使用in命令完成,后面跟需要導(dǎo)入的文件名。 (2) 導(dǎo)出。 這個動作使用out命令完成,后面跟需要導(dǎo)出的文件名。 (3) 使用SQL語句導(dǎo)出。 這個動作使用queryout命令完成,它跟out類似,只是數(shù)據(jù)源不是表或視圖名,而是SQL語句。 (4) 導(dǎo)出格式文件。 這個動作使用format命令完成,后而跟格式文件名。 下面介紹一些常用的選項(xiàng): -f format_file format_file表示格式文件名。這個選項(xiàng)依賴于上述的動作,如果使用的是in或out,format_file表示已經(jīng)存在的格式文件,如果使用的是format則表示是要生成的格式文件。 -x 這個選項(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ù)時,導(dǎo)到哪一行結(jié)束。 -c 使用char類型做為存儲類型,沒有前綴且以"\t"做為字段分割符,以"\n"做為行分割符。 -w 和-c類似,只是當(dāng)使用Unicode字符集拷貝數(shù)據(jù)時使用,且以nchar做為存儲類型。 -t field_term 指定字符分割符,默認(rèn)是"\t"。 -r row_term 指定行分割符,默認(rèn)是"\n"。 -S server_name[ \instance_name] 指定要連接的SQL Server服務(wù)器的實(shí)例,如果未指定此選項(xiàng),bcp連接本機(jī)的SQL Server默認(rèn)實(shí)例。如果要連接某臺機(jī)器上的默認(rèn)實(shí)例,只需要指定機(jī)器名即可。 -U login_id 指定連接SQL Sever的用戶名。 -P password 指定連接SQL Server的用戶名密碼。 -T 指定bcp使用信任連接登錄SQL Server。如果未指定-T,必須指定-U和-P。 -k 指定空列使用null值插入,而不是這列的默認(rèn)值。 2. 如何使用bcp導(dǎo)出數(shù)據(jù) (1) 使用bcp導(dǎo)出整個表或視圖。 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 在使用密碼登錄時需要將-U后的用戶名和-P后的密碼加上雙引號。 注:bcp除了可以在控制臺執(zhí)行外,還可以通過調(diào)用SQL Server的一個系統(tǒng)存儲過程xp_cmdshell以SQL語句的方式運(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) 對要導(dǎo)出的表進(jìn)行過濾。 bcp不僅可以接受表名或視圖名做為參數(shù),也可以接受SQL做為參數(shù)。通過SQL語句可以對要導(dǎo)出的表進(jìn)行過濾,然后導(dǎo)出過濾后的記錄。 EXEC master..xp_cmdshell ‘bcp "SELECT TOP 20 * FROM AdventureWorks.sales.currency" queryout c:\currency2.txt -c -U"sa" -P"password"‘ |
|