sql导入csv时如何跳过或者处理最后一行?

cloverlay 2016-02-24 04:31:25
环境:服务器64位的系统,SQL Sever 2008 64位版本
问题:在导入CSV文件的时候,以往的解决方法是手工删除最后一行不合规数据,然后bulk insert;现在CSV数据源文件越来越多,而且都是最后有一行不合规数据要手工删除,而且是天天导数据;如果忘了删除就一定会报错。
试着装Microsoft Text Driver,可是只能在32位机器上通过;服务器不考虑回退到32位系统;
因为是大家都用的导入存储过程,也不考虑在本机上导入了再复制到服务器的解决方法。

请问:如何才能避免每个文件的手工删除操作?或者在导入的时候跳过,或者使用其它什么驱动能直接导入数据库再处理?
或者有什么软件能直接调用,自动删除最后一行?
或者其他高招?
说明:最后一行的固定内容和格式比较固定:制表人:*** 制表部门:**分公司 制表日期: 2016-**-**
需导入的CSV文件行数在1万到10万行之间,行数不定。
...全文
702 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloverlay 2016-03-07
  • 打赏
  • 举报
回复
引用 9 楼 roy_88 的回复:
参照: http://bbs.csdn.net/topics/391905771
终于搞明白了问题。 问题的最关键在于csv数据文件的第6行,结尾是0x0a;与第7行到80000行的0x2c0a结尾符不同,导致出错; 最后用批处理解决了问题。 不过还是非常感谢,通过你的例子,我好像是对格式文件的编写有了一点认识。
中国风 2016-03-01
  • 打赏
  • 举报
回复
cloverlay 2016-03-01
  • 打赏
  • 举报
回复
各位大神:我对于格式化文件的编写不懂,请指教: 我在网上找了半天,试着用BCP把已经导入数据库的表生成了一份格式化文件: 10.0 71 1 SQLNCHAR 2 510 "" 1 省份 Chinese_PRC_CI_AS 2 SQLNCHAR 2 510 "" 2 地市 Chinese_PRC_CI_AS 3 SQLNCHAR 2 510 "" 3 区县 Chinese_PRC_CI_AS 4 SQLNCHAR 2 510 "" 4 渠道编码 Chinese_PRC_CI_AS 5 SQLNCHAR 2 510 "" 5 代理商 Chinese_PRC_CI_AS ........ ........ 65 SQLNCHAR 2 510 "" 65 推荐人ID Chinese_PRC_CI_AS 66 SQLNCHAR 2 510 "" 66 推荐人编码 Chinese_PRC_CI_AS 67 SQLNCHAR 2 510 "" 67 推荐人部门编码 Chinese_PRC_CI_AS 68 SQLNCHAR 2 510 "" 68 推荐人部门名称 Chinese_PRC_CI_AS 69 SQLNUMERIC 1 19 "" 69 分月送费 "" 70 SQLNUMERIC 1 19 "" 70 公允价值调整额 "" 71 SQLNUMERIC 1 19 "" 71 套餐档位(元) "" 可是:1、我丝毫没有看出这里面怎么指定前5行和最后1行怎么不导入?试着导入了一下,没法导入。 2、数据源文件从别的系统导出,里面的字段分隔符是逗号(0x2c),行终止符是不可见,用UE查看是0x2c0a; 这个格式文件该用什么生成?如果不符合要求该怎么改?
中国风 2016-02-29
  • 打赏
  • 举报
回复
引用 6 楼 cloverlay 的回复:
不好意思,我在csdn是新手,昨天已经想到了上传csv文件,但是找了半天都没搞明白怎么上传
参照#2,#4 前5行和最好1行不导入,用格式化文件导入
cloverlay 2016-02-25
  • 打赏
  • 举报
回复
不好意思,我在csdn是新手,昨天已经想到了上传csv文件,但是找了半天都没搞明白怎么上传
yooq_csdn 2016-02-25
  • 打赏
  • 举报
回复
你把csv文件发出来,才方便各路大神给你写脚本
中国风 2016-02-24
  • 打赏
  • 举报
回复
引用 3 楼 cloverlay 的回复:
版主的意思我明白了,可是文件头还有5行也是不合规数据,格式文件写不出来啊? 另外,1楼的“读入临时表中”,怎么读?
指定从6行开始导入 FIRSTROW=6
cloverlay 2016-02-24
  • 打赏
  • 举报
回复
版主的意思我明白了,可是文件头还有5行也是不合规数据,格式文件写不出来啊?


另外,1楼的“读入临时表中”,怎么读?
中国风 2016-02-24
  • 打赏
  • 举报
回复
  DECLARE @i INT
  SELECT @i=COUNT(1)-1
      FROM  OPENROWSET(BULK  '导入文件',
      FORMATFILE='格式文件'
       ) AS t1;

EXEC(
'BULK INSERT 表 FROM ''导入文件''
WITH 
(
formatfile=''格式文件'',
LASTROW = '+@i+'
)'
)
shoppo0505 2016-02-24
  • 打赏
  • 举报
回复
读入临时表中,删除最后一行,在处理可行么?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧