bcp命令是SQL Server提供的一個快捷的數據導入導出工具使用它不需要啟動任何圖形管理工具就能以高效的方式導入導出數據bcp是SQL Server中負責導入導出數據的一個命令行工具它是基於DBLibrary的並且能以並行的方式高效地導入導出大批量的數據bcp可以將數據庫的表或視圖直接導出也能通過SELECT FROM語句對表或視圖進行過濾後導出在導入導出數據時可以使用默認值或是使用一個格式文件將文件中的數據導入到數據庫或將數據庫中的數據導出到文件中
bcp的主要參數介紹
bcp共有四個動作可以選擇
() 導入
這個動作使用in命令完成後面跟需要導入的文件名
() 導出
這個動作使用out命令完成後面跟需要導出的文件名
() 使用SQL語句導出
這個動作使用queryout命令完成它跟out類似只是數據源不是表或視圖名而是SQL語句
() 導出格式文件
這個動作使用format命令完成後而跟格式文件名
下面介紹一些常用的選項
f format_file
format_file表示格式文件名這個選項依賴於上述的動作如果使用的是in或outformat_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值插入而不是這列的默認值
如何使用bcp導出數據
() 使用bcp導出整個表或視圖
bcp AdventureWorkssalescurrency out c:\currencytxt c Usa Ppassword 使用密碼連接或bcp AdventureWorkssalescurrency out c:\currencytxt c T 使用信任連接
下面是上述命令執行後的輸出結果
Starting copy
rows copied
Network packet size (bytes):
Clock Time (ms) Total : Average : ( rows per sec)
下面是currencytxt的部分內容
AED Emirati Dirham ::
AFA Afghani ::
ZWD Zimbabwe Dollar ::
在使用密碼登錄時需要將U後的用戶名和P後的密碼加上雙引號
注bcp除了可以在控制台執行外還可以通過調用SQL Server的一個系統存儲過程xp_cmdshell以SQL語句的方式運行bcp如上述第一條命令可改寫為
EXEC masterxp_cmdshell bcp AdventureWorkssalescurrency out c:\currencytxt c Usa Ppassword
執行xp_cmdshell後返回信息以表的形式輸出為了可以方便地在SQL中執行bcp下面的命令都使用xp_cmdshell執行bcp命令
() 對要導出的表進行過濾
bcp不僅可以接受表名或視圖名做為參數也可以接受SQL做為參數通過SQL語句可以對要導出的表進行過濾然後導出過濾後的記錄
EXEC masterxp_cmdshell bcp SELECT TOP * FROM AdventureWorkssalescurrency queryout c:\currencytxt c Usa Ppassword
bcp還可以通過簡單地設置選項對導出的行進行限制
這條命令使用了兩個參數F 和L 表示從SE
EXEC masterxp_cmdshell bcp SELECT TOP * FROM AdventureWorkssalescurrency queryout c:\currencytxt F L c Usa Ppassword
LECT TOP * FROM AdventureWorkssalescurrency所查出來的結果中取第條到條記錄進行導出
如何使用bcp導出格式文件
bcp不僅可以根據表視圖導入導出數據還可以配合格式文件對導入導出數據進行限制格式文件以純文本文件形式存在分為一般格式和xml格式用戶可以手工編寫格式文件也可以通過bcp命令根據表視圖自動生成格式文件
EXEC masterxp_cmdshell bcp AdventureWorkssalescurrency format nul f c:\currency_formatfmt c T
上述命令將currency表的結構生成了一個格式文件currency_formatfmt下面是這個格式文件的內容
SQLCHAR \t CurrencyCode SQL_Latin_General_CP_CI_AS
SQLCHAR \t Name SQL_Latin_General_CP_CI_AS
SQLCHAR \r\n ModifiedDate
這個格式文件記錄了這個表的字段(共個字段)類型長度字符和行分割符和字段名等信息
bcp還可以通過x選項生成xml格式的格式文件
EXEC masterxp_cmdshell bcp AdventureWorkssalescurrency format nul f c:\currency_formatfmt x c T
xml格式文件所描述的內容和普通格式文件所描述的內容完全一樣只是格式不同
如何使用bcp導入數據
bcp可以通過in命令將上面所導出的currencytxt和currencytxt再重新導入到數據庫中由於currency有主鍵因此我們將復制一個和currency的結構完全一樣的表
SELECT TOP * INTO AdventureWorkssalescurrency FROM AdventureWorkssalescurrency
將數據導入到currency表中
EXEC masterxp_cmdshell bcp AdventureWorkssalescurrency in c:\currencytxt c T
導入數據也同樣可以使用F和L選項來選擇導入數據的記錄行
EXEC masterxp_cmdshell bcp AdventureWorkssalescurrency in c:\currencytxt c F L T
在導入數據時可以根據已經存在的格式文件將滿足條件的記錄導入到數據庫中不滿足則不導入如上述的格式文件中的第三個字段的字符長度是如果某個文本文件中的相應字段的長度超過則這條記錄將不被導入到數據庫中其它滿足條件的記錄正常導入
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22188.html