共计 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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!