1. 程式人生 > >SQL Server 使用bcp進行大資料量匯出匯入

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

或者使用圖形介面: