将一个excel表导入sql server,通过web,理论上最快每秒可以导入多少条

  • o
    opensesame
    有个excel表,有21列,每个sheet大概有不到10w条记录导入过程还需要对比,比如sheet里的第二列,跟现有的一张表(表A)里的值对比,如果存在就直接导入这行记录,否则还要在这个表A里先增加一条新记录
    因为导入到数据库后,第二列数据不是直接显示值,而是显示表A对应的FID
    我不知道这个web后台是什么写的,可能是jsp或asp,导入速度每秒只有100条左右,不知道是不是正常,如果不正常我打算尝试自己写一个,我觉得就是循环读取这个excel的记录,然后逐条写入数据库,不应该这么慢。
  • z
    zhenyue
    我觉得你就是那种在循环里写SQL 的程序员
  • G
    GeBron
    从 excel 读一条数据,就要去表A匹配一下第二列的数据?
  • z
    zsdicky
    之前试过将股票软件几年的数据下载Excel格式,然后用Delphi编了个小程序转到SQL
  • I
    IAmThrilling
    要看log,瓶颈是在数据库写入还是程序坐循环判断,按理说写入可以是一次性点吧,斗判断好了一次搞定
  • o
    opensesame
    我又不是专业码农。有什么好的方法么 这批数据我倒一次都可以睡一觉了
  • P
    Pyrrhus
    先把所有数据导入到临时表,然后用sql梳理数据,100w数据基本上应该5秒以内
  • s
    songco
    看起来可能是一条数据一个transaction 导致的

    一批一个transaction会快很多
  • z
    zhenyue
    我觉得你现在用的这个程序, 很可能就是一条条循环出来的。
    正常来说半分钟之内一次性导入。
  • h
    happyd8699
    先全部导入,然后再把表A中没有的值添加上
  • o
    opensesame
    会的,不过我也只能理解到这一层,真正的批量导入应该怎么实现呢HiPDA·NG
  • o
    opensesame
    不对比也一样慢,应该就是大家说的一个导入方式不对,效率低HiPDA·NG
  • l
    loveitmac
    和你A表的数据量大小和程序导入方式有关系。
  • z
    zhenyue
    EXCEL导入数据库里的一张临时表。
    然后数据库一条SQL 结果就出来了。
  • e
    eCool
    肯定是没有用批量执行sql了,10w数据,批量的话,不需要多久 iOS fly ~
  • o
    opensesame
    我能理解的也是循环这个excel插入sql server,就是说正确的方式应该是全部读取后批量一次性写入对吗,有什么关键词我学习下HiPDA·NG
  • h
    happyd8699
    BULK INSERT 应该最快,从一个文本文件中读取数据,插入表
  • o
    opensesame
    谢谢各位,晚上我学习下HiPDA·NG
  • o
    opensesame
    太神奇了,按照教程用BULK INSERT,插入几万条测试数据几乎瞬时完成,不过还没用到工作中,还要继续学习
    (1036800 行受影响) 用了5秒钟
    更新一下,早上要到了源代码,古老的asp写的,我大概能看懂,asp里用一个无组件上传功能,上传本地的excel文件到服务器,然后逐行地区数据,判断,符合导入规则的再导入,也就是之前说的一行一行的插入,
    我自己测试的时候,是用的txt文件,用tab键分割列,所以代码是
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n'


    那么对于这个excel文件,要怎么写呢,好像只能用csv文件
  • o
    opensesame
    继续问,看资料只能导入txt和csv.现在把xls文件另存csv可以导入,但是遇到有逗号的怎么办呢HiPDA·NG
  • s
    sunrainx
    回复20#opensesame

    最好直接连接数据库干,导入有向导,合并一条sql就够了
  • o
    opensesame
    其他同事只会在页面上点点按钮来操作HiPDA·NG