使用BCP將SQL Server表資料匯出為txt或xls等格式檔案
命令為 exec master..xp_cmdshell 'bcp "selct語句" queryout c:\test.xls -w -S 資料庫伺服器名 -U "使用者名稱" -P "密碼"'
注意,-S -U -P要大寫
例如:
exec master..xp_cmdshell 'bcp "select top 10 * from rw_dbs_cz..rmstpar" queryout c:\rmstpar.xls -w -S magickerr -U "sa" -P "strong"'
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還可以透過簡單地設定選項對匯出的行進行限制。
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"'
這條命令使用了兩個引數-F 10和-L 13,表示從SELECT 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#等)執行,這也是使客戶端程式具有資料匯入匯出功能的方法之一。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-704101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【實戰教程】使用雲函式將資料表匯出為 Excel 檔案函式Excel
- SQLSERVER匯出TXT文字檔案,ORACLE SQL LOADER匯入TXT文字檔案SQLServerOracle
- oracl 資料庫 sqlplus 匯出資料為sql檔案資料庫SQL
- 一次將資料匯出為 CSV 格式檔案時遇到的坑
- 如何將SQL Server 2000備份的資料庫檔案還原(升級)為SQL Server 2005或更高版本的資料庫?SQLServer資料庫
- 使用mysql直接匯出資料為txt或csv時使用-q引數MySql
- python解析fiddler匯出txt流量資料為json格式PythonJSON
- SQL Server 的xp_cmdshell和bcp使用SQLServer
- SQL Server 2014 匯出資料字典SQLServer
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- .sql檔案匯入到sql server中SQLServer
- 匯出資料為csv格式
- 將Swagger2文件匯出為HTML或markdown等格式離線閱讀SwaggerHTML
- SQL SERVER備份資料庫檔案(使用SSMS)SQLServer資料庫SSM
- [20180918]檔案格式與sql_id.txtSQL
- PHP 匯出 CSV 格式檔案PHP
- 4242.全文檢索與檔案匯出試驗, ④檔案完整路徑,使用“匯出→資料夾” ,匯出為網址,無法使用...
- SQL SERVER資料庫檔案刪除、分割槽格式化解決方案SQLServer資料庫
- PHP匯出大量資料,儲存為CSV檔案PHP
- Excel資料匯入Sql Server,部分數字為NullExcelSQLServerNull
- MySQL 匯出資料為csv格式的方法MySql
- Navicat如何匯入和匯出sql檔案SQL
- SQL server 修改表資料SQLServer
- 如何將資料熱匯出到檔案
- [20220104]檔案格式與sql_id計算.txtSQL
- xlsx是什麼格式的檔案 xls和xlsx工作表哪個好用
- Mysql資料庫使用Navicat Mysql匯入sql檔案報錯MySql資料庫
- django實現將後臺資料excel檔案形式匯出DjangoExcel
- [20190410]dg建立臨時表檔案資料檔案.txt
- PHP 匯出大資料 CSV 檔案PHP大資料
- 一步一步將PlantUML類圖匯出為自定義格式的XMI檔案
- 將資料庫中資料匯出為excel表格資料庫Excel
- DataGear 變更部署資料庫為SQL Server填坑指南(含轉寫後的SQL server程式碼及SQL server配置檔案)資料庫SQLServer
- 匯入sql檔案出現亂碼SQL
- mysql mysqldump只匯出表結構或只匯出資料的實現方法MySql
- 使用plsql 匯出欄位為json 格式SQLJSON
- SQL Server資料檔案增長檢測(三)RFSQLServer
- SQL Server資料檔案增長檢測(一)FMSQLServer
- SQL Server 資料庫檔案的分離和附加SQLServer資料庫