SQL Server 使用bcp進行大數據量導出導入


轉載:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html

 

SQL Server的導出導入方式有:

  1. 在SQL Server中提供了導入導出的界面操作。
  2. 在界面操作中又分【復制一個或多個表或視圖的數據】和【編寫查詢以指定要傳輸的數據】兩種模式,第一種是直接對表、視圖進行全部字段、記錄進行導出,而第二種就是可以通過SQL語句來控制導出導入的字段和行。
  3. 使用 簡單但有用的SQL腳本 中的【表復制】這里面的方法。
  4. 再一種就是在命令行中使用bcp命令來導入導出數據,需要特別說明的是,這是對大數據量導入導出就好的辦法。下面是我實踐出來可以使用的腳本,但是我在使用bcp的時候遇到了一些問題,希望大家給於幫助。謝謝。(PS:問題在下面代碼中)使用xp_cmdshell的時候可能會有些問題,可以參考:MSsql2005 如何啟用xp_cmdshell
--還沒有解決的問題 
--1:使用BCP命令時如果導出的字段為空想替換為其它描述(比如替換成NULL)如何辦?
--2:使用 case when 時就會出現1023字節的問題,那有沒其它辦法解決呢?
--3:使用BCP命令導出大數據量時出現錯誤:查詢提示超過了最大目錄緩沖區 1023 字節(2164 字節輸入)。
--備注
--1:已經使用了Coalesce代替case when,但是還是超出字符數了。
--2:對以網上說的放到Temp數據庫中、中間表,這些?但是數據表幾十G了,還能這樣?

--整個表導出(out)
bcp 數據庫名.dbo.表名 out c:\currency.txt -S"數據庫實例" -U"用戶" -P"密碼" -c 

--使用SQL語句導出(queryout)
bcp "select * from 數據庫名.dbo.表名" queryout c:\currency.txt -S 數據庫實例 -U"用戶" -P"密碼" -c

--設置字段分隔符和行分隔符(-c -t"," -r"\n"),不想輸入字段類型等請配合-c一起使用
 bcp "select * from 數據庫名.dbo.表名" queryout c:\currency.txt -S 數據庫實例 -U"用戶" -P"密碼" -c -t"," -r"\n"

--指定每批導入數據的行數、指定服務器發出或接收的每個網絡數據包的字節數(-k -b5000 -a65535)
 bcp "select * from 數據庫名.dbo.表名" queryout c:\currency.txt -S 數據庫實例 -U"用戶" -P"密碼" -c -t"," -r"\n" -k -b5000 -a65535

--在查詢分析器上執行(EXEC master..xp_cmdshell)
EXEC master..xp_cmdshell 'bcp "select * from 數據庫名.dbo.表名" queryout c:\currency.txt -S 數據庫實例 -U"用戶" -P"密碼" -c'

--把SQL語句生成一個.sql文件,然后調用
--注:路徑的文件夾名稱中間不能有空格
exec master..xp_cmdshell 'osql -S 數據庫實例 -U 用戶 -P 密碼 -i    C:\cmdshellTest.sql'  

--將數據導入到currency表中
EXEC master..xp_cmdshell 'bcp 數據庫名.dbo.表名 in c:\currency.txt -c -T'
--導入數據也同樣可以使用-F和-L選項來選擇導入數據的記錄行。
EXEC master..xp_cmdshell 'bcp 數據庫名.dbo.表名 in c:\currency.txt -c -F 10 -L 13 -T' 

  

在使用命令xp_cmdshell的時候需要設置權限:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*MSsql2005 如何啟用xp_cmdshell
默認情況下,sql server2005安裝完后,xp_cmdshell是禁用的(可能是安全考慮),如果要使用它,可按以下步驟
*/
-- 允許配置高級選項
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 啟用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GO

--執行想要的xp_cmdshell語句
Exec xp_cmdshell 'query user'
GO

--用完后,要記得將xp_cmdshell禁用(出於安全考慮)
-- 允許配置高級選項
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 禁用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 0
GO
--重新配置
RECONFIGURE
GO

  

或者使用圖形界面:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM