共計 2164 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章給大家分享的是有關數據庫中如何處理帶有引號文本限定符的 CVS 的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
公司需要導入數據到 MSSQLSERVER,但是對方給出的奇葩 cvs 文件是這樣的:
aa,bb,cc,dd,ee
1, this
is a ,1, this is a ,1
2, this is
a ,2, this is a ,2
普通的 bcp 處理會有悲催的錯位,而且 mssql 個坑貨也不能像 mysql 自動區分文本限定符的
研究了一下,用這個方式處理:
1. 在 DB 里建立對應的表
此處)折疊或打開
/*generaate thebcp fmt file*/
exec xp_cmdshell bcp test.dbo.table_1 format nul -t , -c -x -f C:\test\table_1.xml -U**** -P****
go
3,修改 xml,請注意高亮部分。這個你們用 ie 來打開的話也可以明確的看到
此外還有這些特殊字符,大家先備著,萬一哪天被不靠譜的豬隊友坑了還能用。
單引號是 apos;
雙引號是 quot;
是 amp;
是
是
空格是 nbsp; 等
點擊 (此處) 折疊或打開
?xml version= 1.0 ?
BCPFORMAT xmlns= http://schemas.microsoft.com/sqlserver/2004/bulkload/format xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance
RECORD
FIELD ID= 1 xsi:type= CharTerm TERMINATOR= , quot; MAX_LENGTH= 12 /
FIELD ID= 2 xsi:type= CharTerm TERMINATOR= quot;, MAX_LENGTH= 50 COLLATION= Chinese_PRC_CI_AS /
FIELD ID= 3 xsi:type= CharTerm TERMINATOR= , quot; MAX_LENGTH= 12 /
FIELD ID= 4 xsi:type= CharTerm TERMINATOR= quot;, MAX_LENGTH= 50 COLLATION= Chinese_PRC_CI_AS /
FIELD ID= 5 xsi:type= CharTerm TERMINATOR= \r\n MAX_LENGTH= 12 /
/RECORD
ROW
COLUMN SOURCE= 1 NAME= aa xsi:type= SQLINT /
COLUMN SOURCE= 2 NAME= bb xsi:type= SQLVARYCHAR /
COLUMN SOURCE= 3 NAME= cc xsi:type= SQLINT /
COLUMN SOURCE= 4 NAME= dd xsi:type= SQLVARYCHAR /
COLUMN SOURCE= 5 NAME= ee xsi:type= SQLINT /
/ROW
/BCPFORMAT
然后再把 cvs 的首列的標題去掉,雖說微軟說可以通過 firstrow 來指定第一行,但我之前用了 firstrow= 2 居然是從第二行開始的。
如果不去掉,會報錯,由于趕時間,報錯測原因和具體原理暫時不考慮再去深入研究了,之后有時間慢慢測。
4. 從 cvs 里取值,這里我用了 openrowset 來做驗證,其實這個時候也可以直接用 bcp 加指定 format file 來進行導入操作了。
點擊 (此處) 折疊或打開
select * from
openrowset(bulk C:\Booker\test.csv , – 要讀取的文件路徑和名稱
formatfile= C:\Booker\Table_1.xml , – 格式化文件的路徑和名稱
–fieldterminator= , ,
firstrow = 1,– 要載入的第一行
–lastrow = 1000, – 要載入的最后一行, 此值必須大于 firstrow
maxerrors = 100, – 在加載失敗之前加載操作中最大的錯誤數
–errorfile = c:\wc_error1.txt , – 存放錯誤的文件
rows_per_batch = 10000 – 每個批處理導入的行數
) as t
你需要的結果有了
文本格式下就是這么個東東
aa bb cc dd ee
———– ————————————————– ———– ————————————————– ———–
1 this,
is, a 1 this is a 1
2 this is
a 2 this is a 2
感謝各位的閱讀!關于“數據庫中如何處理帶有引號文本限定符的 CVS”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!