(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#等)運行,這也是使用戶端程式具有資料匯入匯出功能的方法之一。 |